#include <iostream>

#include <cassert>
#include <cstdio>
#include <iostream>

#define private public // turn your head and cough please
#include "../src/regressor.hh"
#undef private

#include "../src/regressorworker.hh"

namespace
{
  using namespace flassol;

float
square (float x)
{
  return x * x;
}

void
test_regressor_open ()
{
  char* f = tmpnam (NULL);

  bool caught = false;

  try
    {
      Regressor r = Regressor::Open (f).num_weights (1U << 18);
    }
  catch (...)
    {
      caught = true;
    }

  unlink (f);
  assert (caught);

  try
    {
      Regressor r = Regressor::Open (f)
                      .num_weights (1U << 18)
                      .read_only (false)
                      .add_quadratic ('a', 'b')
                      .hash_option (StandardParse::ALL)
		      .loss ("squared");
      Regressor rprime = Regressor::Open (f)
                           .num_weights (1U << 16);

      unlink (f);
      assert (r.get_header ().num_quadratic == 1);
      assert (r.get_header ().quadratic[0].first == 'a');
      assert (r.get_header ().quadratic[0].second == 'b');
      assert (r.get_header () == rprime.get_header ());
    }
  catch (...)
    {
      unlink (f);
      throw;
    }
}

void
do_write (int         fd,
          const void* p,
          size_t      n)
{
  while (n > 0)
    {
      ssize_t rv = write (fd, p, n);

      if (rv < 0 && errno != EINTR)
        {
          throw std::runtime_error (strerror (errno));
        }

      n -= rv;
    }
}

void
cheesy_write_regressor (char*                        f,
                        Regressor::Weight*           weights,
                        unsigned int                 num_weights,
                        std::pair<uint8_t, uint8_t>* quadratic,
                        unsigned int                 num_quadratic,
                        std::pair<uint8_t, Regressor::NGramSpec>* ngram,
                        unsigned int                 num_ngram,
                        std::pair<uint8_t, uint8_t>* dotproduct,
                        unsigned int                 num_dotproduct,
                        bool                         constant_feature)
{
  int fd = open (f,
                 O_WRONLY | O_CREAT | O_EXCL,
                 S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);

  Regressor::Header header;

  header.num_weights = num_weights;
  header.num_quadratic = num_quadratic;
  memcpy (header.quadratic, quadratic, num_quadratic * sizeof (*quadratic));
  header.num_ngram = num_ngram;
  memcpy (header.ngram, ngram, num_ngram * sizeof (*ngram));
  header.num_dotproduct = num_dotproduct;
  memcpy (header.dotproduct, dotproduct, num_dotproduct * sizeof (*dotproduct));
  header.constant_feature = constant_feature;

  do_write (fd, &header, sizeof (header));
  do_write (fd, weights, num_weights * sizeof (Regressor::Weight));
  close (fd);
}

uint64_t
lrand96 ()
{
  uint64_t rv;

  rv = lrand48 ();
  rv <<= 32;
  rv |= lrand48 ();

  return rv;
}

void
test_regressor_linear_once ()
{
  unsigned int num_weights = 1000 + (lrand48 () % 65536);
  Regressor::Weight weights[num_weights];

  for (unsigned int n = 0; n < num_weights; ++n)
    {
      weights[n].value = drand48 ();
      weights[n].sum_sq_grad = 0;
    }

  char* f = tmpnam (NULL);
  bool add_constant = drand48 () < 0.5;
  cheesy_write_regressor 
    (f, weights, num_weights, 0, 0, 0, 0, 0, 0, add_constant);

  RegressionExample example;

  unsigned int nsone = 256 * drand48 ();
  unsigned int nstwo = 256 * drand48 ();

  example.f = boost::shared_ptr<IndexedFeatureSet> (new IndexedFeatureSet ());
  (*example.f)[nsone] = FeatureSet ();
  (*example.f)[nstwo] = FeatureSet ();

  unsigned int num_features = 256 * drand48 ();
  float sumw = 0;
  float xnorm = 0;
  uint64_t numfeats = 0;
  
  for (unsigned int n = 0; n < num_features; ++n)
    {
      uint64_t feature = lrand96 ();
      float fweight = drand48 () - 0.5;
      unsigned int ns = (drand48 () < 0.5) ? nsone : nstwo;

      (*example.f)[ns]->push_back (Feature (feature, fweight));

      sumw += weights[feature % num_weights].value * fweight;
      xnorm += square (fweight);
      ++numfeats;
    }

  if (add_constant)
    {
      sumw += weights[0].value;
      xnorm += 1;
      ++numfeats;
    }

  try
    {
      Regressor r = Regressor::Open (f);
      unlink (f);

      unsigned int num_threads = 1 + 4 * drand48 ();
      std::vector<Regressor::EstimateResult> rv (1);

      for (unsigned int t = 0; t < num_threads; ++t)
        {
          r.get_partial (example.f.get (), t, num_threads, rv);
        }

      assert (fabs (rv[0].p - sumw) <= 1e-5 * (1.0 + fabs (rv[0].p) + fabs (sumw)) ||
              (std::cerr << "rv[0] = " << rv[0].p << " ?= " 
                         << sumw << " = sumw" << std::endl,
               0));

      assert (fabs (rv[0].wdotx - sumw) <= 1e-5 * (1.0 + fabs (rv[0].wdotx) + fabs (sumw)) ||
              (std::cerr << "rv[0] = " << rv[0].wdotx << " ?= " 
                         << sumw << " = sumw" << std::endl,
               0));

      assert (rv[0].adotb == 0.0 ||
              (std::cerr << "rv[0] = " << rv[0].adotb << " ?= " 
                         << 0.0 << " = 0.0" << std::endl,
               0));

      assert (fabs (rv[0].xnorm - xnorm) <= 1e-5 * (1.0 + fabs (rv[0].xnorm) + fabs (xnorm)) ||
              (std::cerr << "rv[0] = " << rv[0].xnorm << " ?= " 
                         << xnorm << " = xnorm" << std::endl,
               0));

      assert (rv[0].anormplusbnorm == 0.0 || 
              (std::cerr << "rv[0] = " << rv[0].anormplusbnorm << " ?= " 
                         << 0.0 << " = 0.0" << std::endl,
               0));

      assert (rv[0].n == numfeats ||
              (std::cerr << "rv[0] = " << rv[0].n << " ?= " 
                         << numfeats << " = numfeats" << std::endl,
               0));
    }
  catch (...)
    {
      unlink (f);
      throw;
    }
}

void
test_regressor_linear ()
{
  for (unsigned int n = 0; n < 100; ++n)
    {
      test_regressor_linear_once ();
    }
}

void
test_regressor_quad_once ()
{
  unsigned int num_weights = 1000 + (lrand48 () % 65536);
  Regressor::Weight weights[num_weights];

  for (unsigned int n = 0; n < num_weights; ++n)
    {
      weights[n].value = drand48 ();
      weights[n].sum_sq_grad = 0;
    }

  unsigned int nsone = 256 * drand48 ();
  unsigned int nstwo = 256 * drand48 ();

  while (nsone == nstwo)
    {
      nstwo = 256 * drand48 ();
    }

  std::pair<uint8_t, uint8_t> quadratic (nsone, nstwo);

  char* f = tmpnam (NULL);
  bool add_constant = drand48 () < 0.5;
  cheesy_write_regressor (f,
                          weights,
                          num_weights,
                          &quadratic,
                          1,
                          0,
                          0,
                          0,
                          0,
                          add_constant);

  RegressionExample example;

  example.f = boost::shared_ptr<IndexedFeatureSet> (new IndexedFeatureSet ());
  (*example.f)[nsone] = FeatureSet ();
  (*example.f)[nstwo] = FeatureSet ();

  unsigned int num_features_one = 16 * drand48 ();
  unsigned int num_features_two = 16 * drand48 ();
  float sumw = 0;
  float xnorm = 0;
  uint64_t numfeats = 0;
  uint8_t feature_one[num_features_one];
  float fweight_one[num_features_one];
  uint8_t feature_two[num_features_two];
  float fweight_two[num_features_two];
  
  for (unsigned int n = 0; n < num_features_one; ++n)
    {
      feature_one[n] = lrand96 ();
      fweight_one[n] = drand48 () - 0.5;

      (*example.f)[nsone]->push_back (Feature (feature_one[n], fweight_one[n]));

      sumw += weights[feature_one[n] % num_weights].value * fweight_one[n];
      xnorm += square (fweight_one[n]);
      ++numfeats;
    }

  for (unsigned int n = 0; n < num_features_two; ++n)
    {
      feature_two[n] = lrand96 ();
      fweight_two[n] = drand48 () - 0.5;

      (*example.f)[nstwo]->push_back (Feature (feature_two[n], fweight_two[n]));

      sumw += weights[feature_two[n] % num_weights].value * fweight_two[n];
      xnorm += square (fweight_two[n]);
      ++numfeats;
    }

  for (unsigned int n = 0; n < num_features_one; ++n)
    {
      for (unsigned int m = 0; m < num_features_two; ++m)
        {
          uint64_t feature = feature_one[n];
          feature ^= feature_two[m] + 0x9e3779b97f4a7c13ULL + (feature_two[m] << 6) + (feature_two[m] >> 2);

          sumw += weights[feature % num_weights].value * fweight_one[n] * fweight_two[m];
          xnorm += square (fweight_one[n] * fweight_two[m]);
          ++numfeats;
        }
    }

  if (add_constant)
    {
      sumw += weights[0].value;
      xnorm += 1;
      ++numfeats;
    }

  try
    {
      Regressor r = Regressor::Open (f);
      unlink (f);

      unsigned int num_threads = 1 + 4 * drand48 ();
      std::vector<Regressor::EstimateResult> rv (1);

      for (unsigned int t = 0; t < num_threads; ++t)
        {
          r.get_partial (example.f.get (), t, num_threads, rv);
        }

      assert (fabs (rv[0].p - sumw) <= 1e-5 * (1.0 + fabs (rv[0].p) + fabs (sumw)) ||
              (std::cerr << "rv[0] = " << rv[0].p << " ?= " 
                         << sumw << " = sumw" << std::endl,
               0));

      assert (fabs (rv[0].wdotx - sumw) <= 1e-5 * (1.0 + fabs (rv[0].wdotx) + fabs (sumw)) ||
              (std::cerr << "rv[0] = " << rv[0].wdotx << " ?= " 
                         << sumw << " = sumw" << std::endl,
               0));

      assert (rv[0].adotb == 0.0 ||
              (std::cerr << "rv[0] = " << rv[0].adotb << " ?= " 
                         << 0.0 << " = 0.0" << std::endl,
               0));

      assert (fabs (rv[0].xnorm - xnorm) <= 1e-5 * (1.0 + fabs (rv[0].xnorm) + fabs (xnorm)) ||
              (std::cerr << "rv[0] = " << rv[0].xnorm << " ?= " 
                         << xnorm << " = xnorm" << std::endl,
               0));

      assert (rv[0].anormplusbnorm == 0.0 || 
              (std::cerr << "rv[0] = " << rv[0].anormplusbnorm << " ?= " 
                         << 0.0 << " = 0.0" << std::endl,
               0));

      assert (rv[0].n == numfeats ||
              (std::cerr << "rv[0] = " << rv[0].n << " ?= " 
                         << numfeats << " = numfeats" << std::endl,
               0));
    }
  catch (...)
    {
      unlink (f);
      throw;
    }
}

void
test_regressor_quad ()
{
  for (unsigned int n = 0; n < 100; ++n)
    {
      test_regressor_quad_once ();
    }
}

void
test_worker_quad_once ()
{
  unsigned int num_weights = 1000 + (lrand48 () % 65536);
  Regressor::Weight weights[num_weights];

  for (unsigned int n = 0; n < num_weights; ++n)
    {
      weights[n].value = drand48 ();
      weights[n].sum_sq_grad = 0;
    }

  unsigned int nsone = 256 * drand48 ();
  unsigned int nstwo = 256 * drand48 ();

  while (nsone == nstwo)
    {
      nstwo = 256 * drand48 ();
    }

  std::pair<uint8_t, uint8_t> quadratic (nsone, nstwo);

  char* f = tmpnam (NULL);
  bool add_constant = drand48 () < 0.5;
  cheesy_write_regressor (f,
                          weights,
                          num_weights,
                          &quadratic,
                          1,
                          0,
                          0,
                          0,
                          0,
                          add_constant);

  RegressionExample example;

  example.f = boost::shared_ptr<IndexedFeatureSet> (new IndexedFeatureSet ());
  (*example.f)[nsone] = FeatureSet ();
  (*example.f)[nstwo] = FeatureSet ();

  unsigned int num_features_one = 16 * drand48 ();
  unsigned int num_features_two = 16 * drand48 ();
  float sumw = 0;
  float xnorm = 0;
  uint64_t numfeats = 0;
  uint8_t feature_one[num_features_one];
  float fweight_one[num_features_one];
  uint8_t feature_two[num_features_two];
  float fweight_two[num_features_two];
  
  for (unsigned int n = 0; n < num_features_one; ++n)
    {
      feature_one[n] = lrand96 ();
      fweight_one[n] = drand48 () - 0.5;

      (*example.f)[nsone]->push_back (Feature (feature_one[n], fweight_one[n]));

      sumw += weights[feature_one[n] % num_weights].value * fweight_one[n];
      xnorm += square (fweight_one[n]);
      ++numfeats;
    }

  for (unsigned int n = 0; n < num_features_two; ++n)
    {
      feature_two[n] = lrand96 ();
      fweight_two[n] = drand48 () - 0.5;

      (*example.f)[nstwo]->push_back (Feature (feature_two[n], fweight_two[n]));

      sumw += weights[feature_two[n] % num_weights].value * fweight_two[n];
      xnorm += square (fweight_two[n]);
      ++numfeats;
    }

  for (unsigned int n = 0; n < num_features_one; ++n)
    {
      for (unsigned int m = 0; m < num_features_two; ++m)
        {
          uint64_t feature = feature_one[n];
          feature ^= feature_two[m] + 0x9e3779b97f4a7c13ULL + (feature_two[m] << 6) + (feature_two[m] >> 2);

          sumw += weights[feature % num_weights].value * fweight_one[n] * fweight_two[m];
          xnorm += square (fweight_one[n] * fweight_two[m]);
          ++numfeats;
        }
    }

  if (add_constant)
    {
      sumw += weights[0].value;
      xnorm += 1;
      ++numfeats;
    }

  try
    {
      Regressor r = Regressor::Open (f);
      unlink (f);

      unsigned int num_extra_threads = 4 * drand48 ();
      WorkerPool worker_pool (num_extra_threads);

      std::vector<Regressor::EstimateResult> rv (1);

      worker_pool.estimate (r, example.f.get (), rv);

      assert (fabs (rv[0].p - sumw) <= 1e-5 * (1.0 + fabs (rv[0].p) + fabs (sumw)) ||
              (std::cerr << "rv[0] = " << rv[0].p << " ?= " 
                         << sumw << " = sumw" << std::endl,
               0));

      assert (fabs (rv[0].wdotx - sumw) <= 1e-5 * (1.0 + fabs (rv[0].wdotx) + fabs (sumw)) ||
              (std::cerr << "rv[0] = " << rv[0].wdotx << " ?= " 
                         << sumw << " = sumw" << std::endl,
               0));

      assert (rv[0].adotb == 0.0 ||
              (std::cerr << "rv[0] = " << rv[0].adotb << " ?= " 
                         << 0.0 << " = 0.0" << std::endl,
               0));

      assert (fabs (rv[0].xnorm - xnorm) <= 1e-5 * (1.0 + fabs (rv[0].xnorm) + fabs (xnorm)) ||
              (std::cerr << "rv[0] = " << rv[0].xnorm << " ?= " 
                         << xnorm << " = xnorm" << std::endl,
               0));

      assert (rv[0].anormplusbnorm == 0.0 || 
              (std::cerr << "rv[0] = " << rv[0].anormplusbnorm << " ?= " 
                         << 0.0 << " = 0.0" << std::endl,
               0));

      assert (rv[0].n == numfeats ||
              (std::cerr << "rv[0] = " << rv[0].n << " ?= " 
                         << numfeats << " = numfeats" << std::endl,
               0));
    }
  catch (...)
    {
      unlink (f);
      throw;
    }
}

void
test_worker_quad ()
{
  for (unsigned int n = 0; n < 100; ++n)
    {
      test_worker_quad_once ();
    }
}

void
test_regressor_quad_ngram_once ()
{
  unsigned int num_weights = 1000 + (lrand48 () % 65536);
  Regressor::Weight weights[num_weights];

  for (unsigned int n = 0; n < num_weights; ++n)
    {
      weights[n].value = drand48 ();
      weights[n].sum_sq_grad = 0;
    }

  unsigned int nsone = 256 * drand48 ();
  unsigned int nstwo = 256 * drand48 ();

  while (nsone == nstwo)
    {
      nstwo = 256 * drand48 ();
    }

  std::pair<uint8_t, uint8_t> quadratic (nsone, nstwo);
  unsigned int maxn = 2.0 + 2.0 * drand48 ();
  unsigned int maxk = 2.0 * drand48 ();
  std::pair<uint8_t, Regressor::NGramSpec> ngram (nsone, Regressor::NGramSpec (maxn, maxk));
  bool yes_quadratic = drand48 () < 0.5;

  char* f = tmpnam (NULL);
  bool add_constant = drand48 () < 0.5;
  cheesy_write_regressor (f,
                          weights,
                          num_weights,
                          &quadratic,
                          (yes_quadratic) ? 1 : 0,
                          &ngram,
                          1,
                          0,
                          0,
                          add_constant);

  RegressionExample example;

  example.f = boost::shared_ptr<IndexedFeatureSet> (new IndexedFeatureSet ());
  (*example.f)[nsone] = FeatureSet ();
  (*example.f)[nstwo] = FeatureSet ();

  unsigned int num_features_one = 16 * drand48 ();
  unsigned int num_features_two = 16 * drand48 ();
  float sumw[4] = { 0, 0, 0, 0 };
  float xnorm[4] = { 0, 0, 0, 0 };
  uint64_t numfeats[4] = { 0, 0, 0, 0 };
  uint8_t feature_one[num_features_one];
  float fweight_one[num_features_one];
  uint8_t feature_two[num_features_two];
  float fweight_two[num_features_two];
  
  for (unsigned int n = 0; n < num_features_one; ++n)
    {
      feature_one[n] = lrand96 ();
      fweight_one[n] = drand48 () - 0.5;

      (*example.f)[nsone]->push_back (Feature (feature_one[n], fweight_one[n]));

      for (unsigned int o = 0; o < 4; ++o)
        {
          sumw[o] += weights[(o + feature_one[n]) % num_weights].value * fweight_one[n];
          xnorm[o] += square (fweight_one[n]);
          ++numfeats[o];
        }
    }

  for (unsigned int n = 1; n < maxn; ++n)
    {
      for (unsigned int k = 0; k <= maxk; ++k)
        {
          for (unsigned int x = n * (1 + k); x < num_features_one; ++x)
            {
              uint64_t feature = feature_one[x];
              float weight = fweight_one[x];

              for (unsigned int m = 1; m <= n; ++m)
                {
                  feature ^= feature_one[x-(1+k)*m] + 0x9e3779b97f4a7c13ULL + (feature_one[x-(1+k)*m] << 6) + (feature_one[x-(1+k)*m] >> 2);
                  weight *= fweight_one[x-(1+k)*m];
                }

              for (unsigned int o = 0; o < 4; ++o)
                {
                  sumw[o] += weights[(o + feature) % num_weights].value * weight;
                  xnorm[o] += square (weight);
                  ++numfeats[o];
                }
            }
        }
    }

  for (unsigned int n = 0; n < num_features_two; ++n)
    {
      feature_two[n] = lrand96 ();
      fweight_two[n] = drand48 () - 0.5;

      (*example.f)[nstwo]->push_back (Feature (feature_two[n], fweight_two[n]));

      for (unsigned int o = 0; o < 4; ++o)
        {
          sumw[o] += weights[(o + feature_two[n]) % num_weights].value * fweight_two[n];
          xnorm[o] += square (fweight_two[n]);
          ++numfeats[o];
        }
    }

  if (yes_quadratic)
    {
      for (unsigned int n = 0; n < num_features_one; ++n)
        {
          for (unsigned int m = 0; m < num_features_two; ++m)
            {
              uint64_t feature = feature_one[n];
              feature ^= feature_two[m] + 0x9e3779b97f4a7c13ULL + (feature_two[m] << 6) + (feature_two[m] >> 2);

              for (unsigned int o = 0; o < 4; ++o)
                {
                  sumw[o] += weights[(o + feature) % num_weights].value * fweight_one[n] * fweight_two[m];
                  xnorm[o] += square (fweight_one[n] * fweight_two[m]);
                  ++numfeats[o];
                }
            }
        }

      for (unsigned int n = 1; n < maxn; ++n)
        {
          for (unsigned int k = 0; k <= maxk; ++k)
            {
              for (unsigned int x = n * (1 + k); x < num_features_one; ++x)
                {
                  uint64_t feature = feature_one[x];
                  float weight = fweight_one[x];

                  for (unsigned int m = 1; m <= n; ++m)
                    {
                      feature ^= feature_one[x-(1+k)*m] + 0x9e3779b97f4a7c13ULL + (feature_one[x-(1+k)*m] << 6) + (feature_one[x-(1+k)*m] >> 2);
                      weight *= fweight_one[x-(1+k)*m];
                    }

                  for (unsigned int m = 0; m < num_features_two; ++m)
                    {
                      uint64_t qf = feature;
                      qf ^= feature_two[m] + 0x9e3779b97f4a7c13ULL + (feature_two[m] << 6) + (feature_two[m] >> 2);
                      float qw = weight * fweight_two[m];

                      for (unsigned int o = 0; o < 4; ++o)
                        {
                          sumw[o] += weights[(o + qf) % num_weights].value * qw;
                          xnorm[o] += square (qw);
                          ++numfeats[o];
                        }
                    }
                }
            }
        }
    }

  if (add_constant)
    {
      for (unsigned int o = 0; o < 4; ++o)
        {
          sumw[o] += weights[o].value;
          xnorm[o] += 1;
          ++numfeats[o];
        }
    }

  try
    {
      Regressor r = Regressor::Open (f);
      unlink (f);

      unsigned int num_threads = 1 + 4 * drand48 ();
      std::vector<Regressor::EstimateResult> rv (4);

      for (unsigned int t = 0; t < num_threads; ++t)
        {
          r.get_partial (example.f.get (), t, num_threads, rv);
        }

      for (unsigned int o = 0; o < 4; ++o)
        {
          assert (fabs (rv[o].p - sumw[o]) <= 1e-5 * (1.0 + fabs (rv[o].p) + fabs (sumw[o])) ||
                  (std::cerr << "rv[o] = " << rv[o].p << " ?= " 
                             << sumw[o] << " = sumw[o]" << std::endl,
                   0));

          assert (fabs (rv[o].wdotx - sumw[o]) <= 1e-5 * (1.0 + fabs (rv[o].wdotx) + fabs (sumw[o])) ||
                  (std::cerr << "rv[o] = " << rv[o].wdotx << " ?= " 
                             << sumw[o] << " = sumw[o]" << std::endl,
                   0));

          assert (rv[o].adotb == 0.0 ||
                  (std::cerr << "rv[o] = " << rv[o].adotb << " ?= " 
                             << 0.0 << " = 0.0" << std::endl,
                   0));

          assert (fabs (rv[o].xnorm - xnorm[o]) <= 1e-5 * (1.0 + fabs (rv[o].xnorm) + fabs (xnorm[o])) ||
                  (std::cerr << "rv[o] = " << rv[o].xnorm << " ?= " 
                             << xnorm[o] << " = xnorm[o]" << std::endl,
                   0));

          assert (rv[o].anormplusbnorm == 0.0 || 
                  (std::cerr << "rv[o] = " << rv[o].anormplusbnorm << " ?= " 
                             << 0.0 << " = 0.0" << std::endl,
                   0));

          assert (rv[o].n == numfeats[o] ||
                  (std::cerr << "rv[o] = " << rv[o].n << " ?= " 
                             << numfeats[o] << " = numfeats[o]" 
                             << " num_one = " << num_features_one 
                             << " num_two = " << num_features_two 
                             << " n = " << maxn << " k = " << maxk 
                             << std::endl,
                   0));
        }
    }
  catch (...)
    {
      unlink (f);
      throw;
    }
}

void
test_regressor_quad_ngram ()
{
  for (unsigned int n = 0; n < 100; ++n)
    {
      test_regressor_quad_ngram_once ();
    }
}

void
test_regressor_dp_once ()
{
  unsigned int num_weights = 1000 + (lrand48 () % 65536);
  Regressor::Weight weights[num_weights];

  for (unsigned int n = 0; n < num_weights; ++n)
    {
      weights[n].value = drand48 ();
      weights[n].sum_sq_grad = 0;
    }

  unsigned int nsone = 256 * drand48 ();
  unsigned int nstwo = 256 * drand48 ();

  while (nsone == nstwo)
    {
      nstwo = 256 * drand48 ();
    }

  std::pair<uint8_t, uint8_t> dotproduct (nsone, nstwo);

  char* f = tmpnam (NULL);
  bool add_constant = drand48 () < 0.5;
  cheesy_write_regressor (f,
                          weights,
                          num_weights,
                          0,
                          0,
                          0,
                          0,
                          &dotproduct,
                          1,
                          add_constant);

  RegressionExample example;

  example.f = boost::shared_ptr<IndexedFeatureSet> (new IndexedFeatureSet ());
  (*example.f)[nsone] = FeatureSet ();
  (*example.f)[nstwo] = FeatureSet ();

  unsigned int num_features_one = 16 * drand48 ();
  unsigned int num_features_two = 16 * drand48 ();
  float sumw[4] = { 0, 0, 0, 0 };
  float adotb[4] = { 0, 0, 0, 0 };
  float wdotx[4] = { 0, 0, 0, 0 };
  float xnorm[4] = { 0, 0, 0, 0 };
  float anormplusbnorm[4] = { 0, 0, 0, 0 };
  uint64_t numfeats[4] = { 0, 0, 0, 0 };
  uint8_t feature_one[num_features_one];
  float fweight_one[num_features_one];
  uint8_t feature_two[num_features_two];
  float fweight_two[num_features_two];

  for (unsigned int n = 0; n < num_features_one; ++n)
    {
      feature_one[n] = lrand96 ();
      fweight_one[n] = drand48 () - 0.5;

      (*example.f)[nsone]->push_back (Feature (feature_one[n], fweight_one[n]));
    }

  for (unsigned int n = 0; n < num_features_two; ++n)
    {
      feature_two[n] = lrand96 ();
      fweight_two[n] = drand48 () - 0.5;

      (*example.f)[nstwo]->push_back (Feature (feature_two[n], fweight_two[n]));
    }

  for (unsigned int n = 0;
       n < std::min (num_features_one, num_features_two);
       ++n)
    {
      for (unsigned int o = 0; o < 4; ++o)
        {
          sumw[o] +=    weights[(o + feature_one[n]) % num_weights].value
                      * fweight_one[n]
                      * weights[(o + feature_two[n]) % num_weights].value
                      * fweight_two[n]
                      + weights[(o + feature_one[n]) % num_weights].value
                      * fweight_one[n]
                      + weights[(o + feature_two[n]) % num_weights].value
                      * fweight_two[n];

          adotb[o] += (  weights[(o + feature_one[n]) % num_weights].value
                       * fweight_one[n]
                       + 1.0f)
                    * (  weights[(o + feature_two[n]) % num_weights].value
                       * fweight_two[n]
                       + 1.0f);

          anormplusbnorm[o] += 
            square (  weights[(o + feature_one[n]) % num_weights].value
                    * fweight_one[n]
                    + 1.0f) 
            + square (  weights[(o + feature_two[n]) % num_weights].value
                      * fweight_two[n]
                      + 1.0f);
                     
          numfeats[o] += 2;
        }
    }

  if (add_constant)
    {
      for (unsigned int o = 0; o < 4; ++o)
        {
          sumw[o] += weights[o].value;
          wdotx[o] += weights[o].value;
          xnorm[o] += 1;
          ++numfeats[o];
        }
    }

  try
    {
      Regressor r = Regressor::Open (f);
      unlink (f);

      unsigned int num_threads = 1 + 4 * drand48 ();
      std::vector<Regressor::EstimateResult> rv (4);

      for (unsigned int t = 0; t < num_threads; ++t)
        {
          r.get_partial (example.f.get (), t, num_threads, rv);
        }

      for (unsigned int o = 0; o < 4; ++o)
        {
          assert (fabs (rv[o].p - sumw[o]) <= 1e-5 * (1.0 + fabs (rv[o].p) + fabs (sumw[o])) ||
                  (std::cerr << "rv[" << o << "].p = " << rv[o].p << " ?= " 
                             << sumw[o] << " = sumw[o]" << std::endl,
                   0));

          assert (rv[o].wdotx == wdotx[o] || 
                  (std::cerr << "rv[o] = " << rv[o].wdotx << " ?= " 
                             << wdotx[o] << " = wdotx[o]" << std::endl,
                   o));

          assert (fabs (rv[o].adotb - adotb[o]) <= 1e-5 * (1.0 + fabs (rv[o].adotb) + fabs (adotb[o])) ||
                  (std::cerr << "rv[o].adotb = " << rv[o].adotb << " ?= " 
                             << adotb[o] << " = adotb[o]" << std::endl,
                   0));

          assert (fabs (rv[o].xnorm - xnorm[o]) <= 1e-5 * (1.0 + fabs (rv[o].xnorm) + fabs (xnorm[o])) ||
                  (std::cerr << "rv[o] = " << rv[o].xnorm << " ?= " 
                             << xnorm[o] << " = xnorm[o]" << std::endl,
                   0));

          assert (fabs (rv[o].anormplusbnorm - anormplusbnorm[o]) <= 1e-5 * (1.0 + fabs (rv[o].anormplusbnorm) + fabs (anormplusbnorm[o])) ||
                  (std::cerr << "rv[o] = " << rv[o].anormplusbnorm << " ?= " 
                             << anormplusbnorm[o] << " = anormplusbnorm[o]" << std::endl,
                   0));


          assert (rv[o].onedotone == 
                  std::min (num_features_one, num_features_two) ||
                  (std::cerr << "rv[o] = " << rv[o].onedotone << " ?= " 
                             << std::min (num_features_one, 
                                          num_features_two) 
                             << " = std::min (" 
                             << num_features_one
                             << ", " 
                             << num_features_two
                             << ")"
                             << std::endl,
                   0));

          assert (rv[o].n == numfeats[o] ||
                  (std::cerr << "rv[o] = " << rv[o].n << " ?= " 
                             << numfeats[o] << " = numfeats[o]" 
                             << " num_one = " << num_features_one 
                             << " num_two = " << num_features_two 
                             << std::endl,
                   0));
        }
    }
  catch (...)
    {
      unlink (f);
      throw;
    }
}

void
test_regressor_dp ()
{
  for (unsigned int n = 0; n < 100; ++n)
    {
      test_regressor_dp_once ();
    }
}

bool
fuzzy_eq (float a,
          float b)
{
  return fabs (a - b) <= 1e-5 * (1.0 + fabs (a) + fabs (b));
}

struct HyperbolicSafeTestDatum
{
  float                 a;
  float                 b;
  float                 s;
  float                 a_new;
  float                 b_new;
};

void
test_hyperbolic_safe ()
{
  HyperbolicSafeTestDatum test_data[] = 
    { {1.6214081089644803, 0.9653893185931754, -3.740980151300994, 13.852770809924266, -13.791383954952742},{-0.7685012928241741, -1.7603565863742305, 2.6584091375076957, -18.01316258971886, -18.082651563246074},{0.9486040973257093, -1.083135420481323, -1.4565716362205121, 4.3436478993865535, -4.374998249083461},{0.4787809136530554, -1.0290409082311056, 0.7577770608408239, -0.23363416431975115, -0.9403610744134578},{-1.606975498236796, 1.9927980320362382, -3.403120094349173, -54.09410475594323, 54.10694080329726},{-1.01142469922517, -0.8863214436283202, -3.975292874242898, -3.3496711206489884, 3.314043209697555},{-1.5956402472694506, -1.6843774610077225, 0.18826015855273237, -1.9429777111877833, -2.0164875448703437},{1.0470468955730392, -1.340510251895712, -1.1935031917515881, 3.8933351201863413, -3.9823007033604028},{0.45389595445661257, -1.918342423020136, -4.610295478438286, 119.2141153972019, -119.22868499674001},{-1.7088999838764611, 0.21425254083084289, -2.454265195058036, -11.254922802987538, 11.126493261471396},{-0.7927222887010239, 1.3742354366048617, -3.007797011702381, -21.918234991712566, 21.94696196652626},{0.5395130083237301, -1.763681380469918, -2.32218846932867, 11.683930944718748, -11.803971367578882},{-1.5961433064441561, 0.5467149762874923, 3.9939166431743782, -28.49441681006387, -28.454929505381678},{-1.9174506885062979, 1.290178137184164, 0.3420803149616294, -1.5807353515642095, 0.6976150331662505},{1.1932069045392018, 1.7669267725014248, -1.962814815592322, -1.834359105291477, 2.250146846209825},{1.089785230411612, 0.5337171564349137, 0.6108201230051504, 1.6461443184671185, 1.3442519376483166},{0.7609781193064591, 1.0081276534317483, 0.9445883695255706, 2.226802146061673, 2.3229036711098208},{-0.046771966921479, -1.453274421524384, -0.025415671362593706, -0.009847152332255506, -1.4525549537888003},{-0.829442363488748, 0.5789925964736593, 4.37461095789142, -9.952843515309318, -9.935107036799163},{1.4503207231312323, -1.06576098301883, -1.230330039487182, 4.361650697187468, -4.2492838311011045},{1.3459876896007246, -1.0963942531562598, -1.6583191007214526, 6.435604844763365, -6.388067565057454},{-0.5746813272885749, -1.9441904475834397, 1.916934052147722, -8.46356396083485, -8.664960056900611},{0.1434654551722172, -0.3416080997899995, 2.1023386966337227, -0.7812967400879819, -0.8405583579302925},{1.6769883904474767, 1.6097482987373035, 3.5351596275198514, 56.36931894096394, 56.367358616416546},{-1.9200426406529698, -1.3311392629842715, -1.9202176226823116, -2.2471509632870035, 1.7706087787352658},{-0.5391641820705806, 1.533231780871414, 1.6975675139019142, 2.52436943800442, 2.903884077950951},{-1.9386446855841766, 0.8818432214557599, 4.458468494287114, -45.646457525184054, -45.61379603638261},{1.2287062824295334, 1.1271162974346534, -1.5650619068734177, 0.4892228622683068, 0.0033209075555951095},{-1.5626002918858786, 0.32510053558579344, -0.5238901556919142, -1.9602017301198464, 1.2273391987552489},{1.9486565645392075, -1.6184098443024388, 3.8958172868167615, 8.159702619251007, 8.087195734754097},{1.6469784825510168, 0.2902646643292073, -1.14836330738982, 2.446082020114958, -1.8316748353629175},{1.881338524279228, -1.9627698161862868, 2.190502033303167, -0.1489835726681168, -0.5789877488511852},{-0.5393026823029583, 1.2124777872634995, 2.0132930822165935, 2.403372241047053, 2.6373193076500536},{-0.5846350046081528, -0.07253446317437251, -3.666373045743165, -10.022476181085414, 10.005672988867829},{0.7439619184708142, 0.5335217739360871, 0.36019534777695394, 0.9891015546569393, 0.8423111257450592},{-0.6952555007267995, 1.6168456210361613, -2.1011336582863644, -9.394850299246038, 9.50757706759279},{-0.2933215690033397, 0.9796439636874075, -0.4339957917176829, -0.7600160957415405, 1.2046946578003936},{-0.7891100278537533, -0.6749117247009009, 3.5532926224017576, -25.5694083826816, -25.5661388606185},{0.1794232007619101, 0.9206253078170397, 4.461083995637567, 47.61754119249571, 47.626101955665526},{1.5399785246814748, 0.14219301694819686, -4.888938763760568, 92.82806431099621, -92.81539855392552},{0.32373628055798553, -1.672499262582025, 3.3421894601538966, -19.036875915978115, -19.107461716416847},{0.6290594991039256, -1.603729256267642, 4.485124889288102, -43.20818064977011, -43.233356413042515},{-1.4070861344092553, -1.9044622748321616, 0.630481511553941, -2.9780110280767556, -3.242781961519906},{0.4893054564420405, -1.0239317554454166, 2.339977971205961, -2.702095022271364, -2.8478648000720237},{-1.454485826375084, 1.509661492754633, 2.874166403104141, 0.40491597699056747, 0.5722811826387115},{-0.27489878366386233, 1.220425898325817, -4.779138890515174, -88.96921578210394, 88.97716126576876},{-1.0297566395202533, 0.8044759085190982, 3.5899807501769736, -4.106652355287574, -4.056029624884486},{-1.4516340808875445, 0.82805034353155, 1.9001285350583128, -2.2553381982811778, -1.9144127703436062},{-0.887743980487196, -1.7791348183055193, 3.727936398674977, -55.451279751280715, -55.47271092511714},{-1.8690080850806003, -1.284014724219554, -3.932961935051901, -14.965167816616173, 14.903414050793884},{0.8982606938792466, -1.964545810248439, 1.1594816778971744, -1.250850127646065, -2.1487656941203355},{-0.06249023046280078, -0.07780755067533685, -2.251342496827058, 0.0653772403740367, -0.08014467916041418},{-0.08172150246604626, 0.4278482767825662, 1.9313147202075163, 1.1569575997153236, 1.2308235582403948},{1.3743617849330394, 0.6978525992081366, 0.8487595824715903, 2.5658743757861497, 2.276365358779909},{-0.1977174723967401, -1.4301141235860588, 3.154650747843368, -19.05584887094628, -19.108414649047525},{-0.20886208612381973, 0.9742321840717096, -0.47541384402346054, -0.7137222837867712, 1.1894975728579458},{0.14960427962454315, -0.4297272678183004, 3.707644061504297, -5.7014732379635795, -5.715687287408182},{-0.3211574525287837, -0.566380996155903, -2.14135623449385, 0.9914046048642475, -1.095686275371654},{-1.4152030692775281, -0.3566116422803447, 2.4245658317130676, -10.05523333990903, -9.961530487637702},{1.205947736665261, 0.6626044813978087, -3.6401866088738037, 10.37492494076792, -10.325880218255902},{-0.9484521648487263, -1.2219005401173053, 4.7251964832870055, -122.35529708382764, -122.35772228957458},{-0.8304364284825607, 0.3536952359431371, 1.0964890672351473, -0.9113698103985208, -0.5158203073589062},{0.08779606571154241, -1.400322304896502, 2.729587342014474, -10.009709750819065, -10.1068038322745},{-1.3525422869821213, 1.1135638816398323, 1.9746080817822058, -1.031942950967664, -0.6896086821305207},{-1.0577693428187533, 1.0771849808361789, 4.076265642595283, 0.5539174875541164, 0.5901492043119951},{-0.8889993147583342, 1.5086116533371494, -0.16568131341570158, -1.1523227584375684, 1.6773303427044497},{1.0457093263156416, 1.4676123275220103, -3.6530366983701947, -8.10840971957736, 8.173535717747097},{0.7277797379684583, -1.616895155082167, 2.3092174276788304, -4.358700848943369, -4.591618416866801},{1.4872374855006485, -0.05031972191423617, -3.767434370992423, 33.280816977093664, -33.247607965069314},{-0.24587660044590742, -0.8664577504424884, 3.7777116279792615, -24.306244599669906, -24.32044037984587},{0.4052301858914884, -0.8455542955494055, 0.10426828187930415, 0.3191106555024806, -0.8078255836624786},{0.8636269381738262, 1.291666304251656, 0.91150617934428, 2.5952387485103134, 2.7672756485339534},{-0.9005233444295249, 1.7864419573376473, 4.152900118033857, 28.15917066060806, 28.201406434189106},{-0.7463982135039537, -0.4091349977666745, -0.3682137932401792, -0.6434948433867576, -0.1560985802017128},{-1.384549279102099, -0.21401054102596428, -2.3698007960464915, -6.334341121364119, 6.184876817464721},{1.1249347447354698, -1.767654124019932, 2.1557562197562596, -2.6072502182995745, -2.942257062711346},{-0.4351578039192452, -0.824745533350294, 4.348299060942594, -48.72222021894208, -48.72725711492036},{-0.8918209116515887, -1.5687000534767568, -0.8395754613549968, 0.2522755749731902, -1.314959423346197},{-0.6659105615144514, 1.9537333838978168, 0.9739815844288033, 1.2108209086975807, 2.19993739282725},{0.8005428772841747, 0.04242313423389232, -1.0271727195997382, 1.2096723652503383, -0.9078755725308117},{-0.7098840217989535, 1.0141009199465274, 0.9531577175508748, 0.06223537628011444, 0.7268690346215498},{-1.6644708743359415, 1.699250975967721, -2.0965339068935025, -13.684702994626061, 13.688976829512939},{-0.23418763387755126, 0.549539666690023, 1.6179282359657945, 0.7173920429889615, 0.8728123170238214},{0.036451692507128985, -0.4665335098576193, 4.218092946968797, -14.598405059834445, -14.605812373193533},{-0.9176709016944369, -1.1388027741425768, -0.5146328355866414, -0.4296182615606843, -0.7995772165617105},{0.5790580904391076, -1.3489708482176803, 2.9925685259985544, -7.626454512693707, -7.723161432433249},{-1.539942572720205, 0.6253247065412908, 0.6535912950269953, -1.4423037573089585, -0.3159873251925902},{-1.6035154668847527, 0.4176342930459027, -2.409515514047034, -11.299532417831715, 11.192970535645093},{-1.0286794601902485, -0.6176163868312798, -4.9090719849361175, -27.85839219287947, 27.846243627134932},{-1.2993353312828724, -0.7279304361579695, -4.447507060184697, -24.414783911510494, 24.39104925710489},{0.27055883990310425, 0.1511250020271051, 1.562245673639282, 1.0181352917410629, 0.9930942315191635},{0.1845454834189919, -1.2629076502392764, 1.1597195580989652, -1.4925274883958466, -1.9464113134689072},{-0.4574308288498503, -0.6766517424384313, 2.3573637099884506, -5.979318557339451, -6.00007208519253},{1.8848297328004784, -1.10845998063217, 0.31580211790536694, 1.623699785059526, -0.5590182456921238},{0.4828880567155851, -0.7404949737408129, 1.5752587533925801, -0.4957852457700831, -0.7489692521994171},{-0.2701636859531007, -1.9347462363303176, -4.441721920304998, 70.66606115007447, -70.6920253851016},{-0.3412170384527198, -1.6525472991218209, -4.9277936058896765, 90.5234342855448, -90.53787405477252},{1.5226465631608734, -1.6132866022947503, -4.683861187619854, 169.63317776078145, -169.6340155697722},{-0.24167628225897464, -0.6284784388662317, -0.595462179376157, 0.11094273609277572, -0.5906657374564462},{-0.058089958466933656, -0.9787686320196982, 2.2690843447354556, -4.965889981781358, -5.061094437264284},{-1.7807540429006126, -1.3814382160285024, 0.19571470996230467, -2.0870653961358734, -1.7587292432733712},{1.0228040050937044, 1.3277059377315572, 1.230602342023377, 3.978706204018335, 4.067773110947303},{1.5953978272693368, -0.23670102116548297, -3.2559939090636862, 23.793442509929932, -23.741074946587943},{-1.2375953772375485, 1.5301440635996544, -1.15003063260871, -4.3243470049561665, 4.41697583838568},{1.0388194748272452, -1.5850480781157277, 3.753153764888813, -11.619041893003097, -11.680555039038982},{0.017341183795642756, 0.6521060771219953, -4.278759007669465, -22.894772742602967, 22.904051182151157},{-0.25706221178550037, -1.3541803773381258, -2.774272627818854, 8.741470706919024, -8.842003937658191},{0.3465863553991477, -1.2782935797658022, -0.65453528808077, 1.3212396145372716, -1.805432494817849},{-1.328955008226929, -0.2719754285723499, 1.6085513406231904, -4.104571023323086, -3.892987606627999},{0.7153818796739877, -0.6566609459584862, 3.089459086545748, 0.6761405399769744, 0.6136761311812311},{1.0480227089799392, -1.0479170991605296, -3.3856584558325293, 30.95434514186995, -30.95434156641332},{0.4733790118558474, 1.5178786453802844, 3.530237884707386, 33.96758810554695, 33.99818979888975},{-0.3930828571602569, 0.058427089971575086, -4.958457151438101, -32.14280595059826, 32.140455410122364},{-0.605246029912688, 0.9548110657177475, -0.5751732674015972, -1.2881188161771413, 1.4847866847064564},{0.27367935121026, -1.2510656525745623, 0.16130029211322228, 0.07457389507392126, -1.2230397154628474},{1.4233443376402133, -0.4480270690239381, 2.526871156644365, 6.1774707414277845, 6.027931976414637},{-0.6065248749277821, -0.3046802337874366, 2.2713809868169657, -4.431624635227283, -4.400483442589911},{-1.7046334170162416, -1.9498639289692958, 1.1488403289856608, -5.725245899989982, -5.802984996571955},{1.860529685746847, 1.3432836821442877, 3.51099863340929, 53.642262548301765, 53.62681392400735},{1.986157119738417, -1.6573489596334374, 4.827971320653333, 20.55805338997827, 20.52889535885717},{-0.202517689476027, -0.0722699702331584, -4.184915247645493, -4.2799433728041105, 4.2757601439342485},{0.5364345581740211, 0.8426712448062252, -4.605501658181298, -15.310017376478353, 15.323803863913454},{0.05235454973154319, -0.21249978925141644, -3.0546221800976587, 2.805425294822205, -2.812974625975599},{-1.265545000912733, -1.499618381244519, 1.9418793702270944, -9.622353129751595, -9.65592724152743},{1.3846760028887184, 1.0391352328747039, -1.0204269399282624, 0.9161510265781359, -0.042510030885187344},{0.48138516510707907, 1.3345399318580142, -3.551002246798901, -14.83941051117346, 14.891520052421237},{-0.2687004617181519, 1.1381014829627913, 4.825351196235745, 54.171180875741186, 54.18246868240374},{-1.4065580184579773, -0.6113515020847144, 3.017282386753646, -20.638132819099532, -20.59922016627343},{0.13265816797032537, 0.6657119517751813, -2.3434635075662937, -2.738158831596216, 2.814798038981737},{-1.3295216034725628, 1.2899869231640997, 1.2697815376192514, -0.43827398586114485, 0.2975275693389463},{1.0102600472419394, 0.8829781857788537, 1.2795894880079084, 3.420952375357463, 3.385548739565257},{-0.2265423840395666, 0.5098784284864584, -4.73443390577996, -41.90073831067859, 41.90322810404991},{1.127159792314445, 0.7343223830857295, -2.7048769888555917, 2.9991928279179447, -2.874699598901561},{-0.3751587274190633, 1.7926198604564307, 0.3868082045132244, 0.30724489509004954, 1.7796464027730445},{1.1867496661759152, 0.4867397896181451, 4.656198454905331, 88.05837841406733, 88.05172655756223},{-0.4387186997367327, -0.2018988317393704, 3.199567087291717, -7.859412122622689, -7.849754642916395},{-0.270178786008193, 0.895569348488086, -3.161283571782133, -13.743085721112074, 13.769584344466505},{0.6093484383892496, 0.4398342908277071, -4.030858166399036, 4.781920398835329, -4.763287875492924},{-0.2747734759547926, 1.726370252610396, 4.819996239061359, 89.96525328151327, 89.98139614271855},{0.6141991174799522, 1.215348095558749, 4.050359537305949, 52.5193250919379, 52.52979476973161},{-1.1991612966899012, 1.8798767343942226, 0.7432472277524642, -0.016456577385567606, 1.4478327044161312},{-0.004697457658556781, -0.991781157146332, -0.6871163685276684, 0.7305221107100869, -1.2317752846190673},{1.1105492249250704, 1.5085627527232979, -2.1356513477711614, -1.5293589545509327, 1.8388531234950607},{-1.8361278476743348, -0.6875519433355592, -4.428160205483472, -48.1272653594591, 48.097141632134154},{1.4159182468997282, -0.7316971961624208, -3.5575962865567656, 37.67761359337837, -37.65810832207187},{-0.3806125205826385, -1.0239160439279789, -2.798384824007016, 5.238139341439293, -5.323686874199395},{0.8517349613320864, -0.10698277319303462, -2.379786348881306, 5.212790512316496, -5.143848539245841},{0.26644695291724174, 1.6363868657733378, 0.6821835297114633, 1.5358252351597819, 2.2283462811489163},{-1.7527532428626211, 0.3865702185230191, -1.65228006331912, -5.713309714028771, 5.45153193991368},{-1.722429130456858, 1.239027914283711, -3.346458085164784, -42.06409924569418, 42.047079249509565},{0.22853874974728194, -1.230991883180156, 0.2332211334804395, -0.05492068685843521, -1.2108374532382034},{-1.5024553863915788, -1.083909306917159, -3.649319502466918, -8.079867160880834, 8.012598862728947},{0.677370206492447, 1.229241809770842, -4.152176980736131, -17.52686284179394, 17.55685410616897},{0.9208847195958714, -0.2987137495795742, 0.8714893484341211, 0.9987361593008122, 0.48854391133004543},{-0.5126057536265392, -0.9721325072110942, -3.3669980250676295, 6.635547347010678, -6.6867604673224195},{-1.917851213543593, -0.14899261939987674, 1.8874852022608017, -6.9573683182118, -6.6894707891284115},{-1.5940459671644307, -0.3044214320666121, -3.720201485180572, -26.636148213722972, 26.590150084688986},{0.47742321136117827, -0.8330738814481418, -2.414595495001746, 7.313217291255932, -7.345013704434418},{0.28338065618048924, -0.29158490545866567, 2.684094162899207, -0.0404451336669589, -0.0797055181991344},{-1.4633828116091199, -0.6327100369023517, -2.0796427611797457, -3.454339201101326, 3.1923803115777583},{-1.6037325413327643, -0.6926246213799618, -2.429598111519748, -5.273627162093614, 5.0713818872949865},{0.24725817593223054, 0.6949812082468099, 2.3969490981159733, 5.157045243522157, 5.197785866884607},{1.5407665090186402, -0.7806093168566755, 0.10445104568465347, 1.4674952514658715, -0.6236439555746845},{0.8766308527899827, -0.3102408715814833, 1.1609915055975106, 1.0901188476132295, 0.7184196881057353},{-0.3641736145617076, -0.8189477151434053, -2.0554006937731364, 1.7001409529701899, -1.8516296062015345},{1.986973390877826, -1.5310997331135658, -4.632773792856766, 180.8290854827292, -180.82465086280928},{0.8944590663102563, 0.2785582963364912, -1.511843495683121, 1.5259076959156976, -1.2672537234539996},{1.6102732944664133, -0.4728308967873922, -2.2239614979790256, 9.689504627001856, -9.56645644378186},{-1.0010048569404841, 0.30289791584637493, -3.752479130448733, -27.798677903137275, 27.78230065322486},{0.8631572248761592, 0.3040139348127062, 3.3602956914999638, 16.815633409593655, 16.796217164693566},{-1.041758161198133, -0.35623345826716535, -4.3444162086528895, -26.41789862499668, 26.39975397557651},{-1.5325125761899971, 1.26848271038335, 2.948424848734577, -2.591718555154218, -2.4448841812019726},{0.6264071311005521, 1.2864351389534079, 0.22660746973151102, 0.9365765335080305, 1.4627730773973002},{1.1923965486160046, 0.15750686421411775, 2.848861640240287, 11.685107890959232, 11.625177216132274},{1.1961839215823487, -1.0861617477204866, -3.0943893437815846, 25.19246165138385, -25.187477353327886},{1.5292713616297013, -0.33098518163025936, 4.5085571286778094, 54.40688004483961, 54.38639054493804},{1.7632491194278503, -0.7736265542166736, -2.0749838236269156, 10.164496402682891, -10.040240918841516},{-1.0597343734050357, -0.5407648153848557, -0.2943620770416473, -0.9444898915375071, -0.24789271590465312},{-1.7882353682526333, 1.2964990848621296, -2.00749582980925, -11.515412342408563, 11.449360050259322},{-0.585232254626662, -1.0567180786359835, -4.7071771365792525, 26.098548287497245, -26.113375481172206},{0.5705945369757481, 0.12833260641993016, 2.1315973336785294, 2.971627090373855, 2.9191537637623255},{-1.0752674032477056, -1.5869123272383696, 2.4719698758095374, -15.746173037741444, -15.789365284277569},{1.6564550118890633, -1.989105655527219, 4.12710852568566, -10.28250284705284, -10.341303733189918},{1.4595165886941137, -0.012559806480677338, -4.481321267495856, 65.03814332126507, -65.02176601533888},{1.8875942908464136, 0.2331431429107873, -2.9564156925747778, 15.961803564444635, -15.851514645237147},{1.2672058664066932, 0.4283591062312695, -4.1227800656813836, 25.9049985036064, -25.877531340680193},{-1.3943309087772777, 1.9707067815445636, -1.9216064046125765, -11.452659168707559, 11.537024251089854},{0.9361202283541084, 1.6623871698587056, 4.633944090440661, 133.71460640340422, 133.72166307535173},{0.6607629011792215, -1.1922123780658214, -2.975629409031765, 18.14741485710872, -18.17452691925842},{0.9288450394239702, 0.24767522841759115, -0.45250082097409194, 0.9096352841671071, -0.16132656852162564},{-0.8467067755017692, 0.9179506949511893, 1.492079545358317, -0.04005260770369068, 0.3568267451644196},{0.3594830829162494, 1.1658530309789081, 1.7761980048738293, 4.437098783615068, 4.573601515053323},{0.7092375272969131, -1.8736600599945379, 0.8710482700220474, -0.8506563222266498, -1.9316315199428344},{1.4432733355428384, -1.7191215789343564, 4.438629915695039, -11.657823337851866, -11.69517789769069},{-0.2572497832139031, 1.4725665539982749, 2.6238024572766854, 8.315696914921427, 8.441154541046176},{-1.1606682620760929, 0.08036304692739105, 4.047472294555025, -30.93595584231519, -30.91427940745823},{-1.6112419182685471, -1.9684558840102713, -1.8234629736497574, 0.8171619166378798, -1.3951600790275798},{-1.3098561216019597, 0.14108285331386172, 0.5313611109484135, -1.4206197362021624, -0.5677514835631469},{-1.8826784139581336, -0.22780681655314883, 3.860627587926338, -50.13632714462638, -50.101484184485834},{1.8530613614631162, -1.0485314449370418, 2.654284953743299, 5.820185494103133, 5.61606098323752},{-1.1649864921263782, 1.726721421457654, 1.5076231176353483, 0.9482293413129383, 1.5885566480961848},{1.6184406459544811, -1.4458649131920218, 4.8781736379490965, 11.349065076626388, 11.325742948532024},{-1.1397009697319578, -1.854125908043794, -1.23846474025674, 0.7986458814329884, -1.6663432498741473},{1.111937717255731, 0.7799359833406512, -3.682787064664511, 6.623496917411883, -6.57591104456397},{-0.8841439778341489, 1.0803936012660023, -1.2266970679986144, -3.3207095390927805, 3.378261624436141},{1.8367412957361555, 0.9747731688519892, -2.830377107783408, 7.388904652601404, -7.22305171714047},{-0.6080004132413119, 0.0645481122893039, 3.576305334203637, -9.721239398798852, -9.702422244216006},{-0.9852122045764791, -1.5594689683042704, 2.5070853269799622, -15.587093535606009, -15.633898594489736},{0.5955086258078328, -0.7119336260341331, -0.40629553839602384, 0.9426202126499381, -1.020172450991885},{1.3843934848375037, 0.04137353899985463, -1.658007703034428, 3.660467795254214, -3.388833269572596},{-1.022817245626452, 1.2385193928812974, -3.6581014122436226, -43.85316522095053, 43.85872632743201},{0.22485920153049754, 0.1972467710328969, 1.7790855468677549, 1.2527003622821826, 1.2480395930545964},{1.4209034129367, 1.1444656002644953, -3.2801860044191438, 3.722213751716291, -3.6257013410869163},{0.8748929230109468, -1.5538697559152896, 0.6915411084446461, -0.06972057710820034, -1.2860538676454822},{1.2959260114736546, -1.1896551892783576, -2.4609797239918603, 14.5654236027203, -14.556353251032501},{-0.7381713520456623, 0.855394979777925, -0.4812233001758557, -1.2530133607307796, 1.3254607156072935},{0.4200994845954229, 1.9737622739884708, -2.4552170121591645, -8.946528797882978, 9.152028817077241},{0.4231171950921544, -1.6212740544044317, 1.592413388005605, -2.7368792530413995, -3.152778051882306},{-1.959269559237214, 1.184597802210857, 4.604916276232544, -38.739477592576705, -38.70803093536279},{-1.5878938463282557, -0.15651633027011091, -3.817591041340613, -32.579060904850515, 32.54071756947584},{-1.5789369024436823, -0.732359446592751, -2.1111048212561334, -3.635200777107013, 3.3552933265207403},{-0.4019293395471917, 1.974932853471607, 2.4775602750734755, 9.269173744185956, 9.468706061634764},{-0.14036793997610775, -1.2122741502688341, 2.398311857670878, -7.393928621738678, -7.49133405477311},{-0.2708045379249471, 1.0042370802459675, 2.4505379245037693, 4.196937524014413, 4.306906267387351},{-1.4607747415270715, -0.24456681191341767, -0.03419028722591655, -1.4532651910552044, -0.19475573300606475},{-1.4429020252906464, -1.8395006871226398, 2.79616958221085, -26.873690394217633, -26.897900139743285},{-0.05440655565315278, -0.6274998275015031, -4.203667994039143, 19.173869213446245, -19.184057354338737},{0.7063616792125957, -1.897890225383042, -2.7511585274131454, 20.354246446089675, -20.430330121510487},{1.8974697048280253, -0.5612788741946533, 2.3663792577985276, 7.23638818739078, 7.005708864382383},{1.3014659285819334, 1.9225368513564178, 1.1192425394398908, 4.835410158885436, 5.0382066041614735},{-0.913080356904481, 0.5137400788507676, -2.591969729279833, -9.543294837648798, 9.513395266083869},{-1.2814984462990968, 0.08268256284955156, 3.833812272623149, -27.730461507720875, -27.70095835110261},{-1.5760131501848618, 0.9630683656143209, -4.7591033056502035, -148.08349589645525, 148.0782409408714},{0.9764269343399059, -1.7365124630622217, 4.611501331824952, -38.232171244872845, -38.25912942127078},{0.15076523339307135, -0.39607323815859075, 4.862386836383589, -15.8610383124406, -15.865266471228708},{-0.8617611464826151, 0.04865545877611366, -3.2390245679833316, -11.62776779119614, 11.595892328150518},{-1.9525149702745899, 1.699517727712038, 2.755259389141756, -2.1053268962404257, -1.8730849253823116},{-0.5970757557752662, -1.875051821631008, -1.8704482201597954, 3.9573811577774682, -4.338223772882087},{0.015184112561183127, 0.8891841653739663, 2.9043401752023135, 8.229864596566577, 8.27774662577307},{-1.4666808417648214, 1.9325015497116316, 3.3891481408117663, 6.84628422801514, 6.960963818237154},{0.7377492202657869, -0.42974920737914246, 4.590357179929281, 15.179486210009223, 15.16763699687925},{-1.6207676780151996, 0.4742616833280091, -0.6858743502728073, -2.3685665249601886, 1.791129158194997},{-0.3146223614213586, 0.7753055601433911, 1.323267371936434, 0.7199833900795642, 1.0101918447866067},{-1.412588593626508, 1.6367221798025278, 0.17728846834180967, -1.1431520448591175, 1.4107620482134484},{0.4818219190491635, -1.1121063213385458, -3.6634539396354358, 31.070171737956557, -31.086334617230115},{-1.33200885688801, 0.35687374068017164, 4.09018241681343, -29.146679623124825, -29.118414179433586},{0.5194343115846425, -0.221193022261976, 2.9878441764981156, 2.9776421877491313, 2.940317558922745},{1.1027538084901938, 0.5869327618730109, 1.057869303533293, 2.5228861003458576, 2.3437957206502835},{-1.5426115496665411, -0.467496984130664, 1.8769747247532456, -6.649006222518905, -6.484457323793701},{0.04391539942851708, -0.016873232994550014, 4.517131889946148, 1.238492399583183, 1.2378285695160025},{-0.9345877486773435, 1.268609839285126, 3.6345495455771903, 6.298099718790748, 6.356254929766855},{1.219441349604967, -0.5713099284798713, -2.0057638701289946, 6.6978300537010185, -6.610619128153873},{-1.0280021008182874, 0.3315476709435128, -2.7648208815642423, -10.814173255454605, 10.770305415252203},{-1.470296691163588, 0.6151241585015415, 1.7386867605453515, -2.616166166043218, -2.2496512571229577},{0.37463733578966085, 0.7508963310983883, 3.5499662197557385, 19.585714505650007, 19.596522774806722},{1.5927208957279468, 1.78770457391665, -4.180628475787323, -6.35080206435601, 6.402485037275966},{0.9625980375688363, 0.060217879858611045, -2.4077132899616203, 5.058095978635132, -4.966021157849429},{0.2838332102565535, -1.0205287294366139, 0.6334128097003786, -0.3478151970969464, -1.0401408595438197},{1.971502432692695, 1.0152233709714276, -1.1858713691687255, 2.0214002589854285, -1.1090156256246941},{1.0339237742751846, 0.5428123611725666, -0.45617770244243605, 0.887084257096812, 0.11209535056948983},{-1.446346446849203, -1.2976238966683282, -0.878148215504341, -0.7490766868005903, -0.39118488672177887},{-0.7121743898133865, -0.061470605350744334, 0.017253497783827676, -0.7133410291871621, -0.07376786385626956},{1.2741033780086028, 0.5369292790882252, 1.2963572668674015, 3.411344965795031, 3.2097084148788926},{0.4141805033855843, 1.486398804091953, 0.5229516735078867, 1.2853499251619938, 1.9209269495572172},{1.5559448691781244, -1.6460373764730267, 1.1237103001915028, 0.38186309635990545, -0.6590098885343441},{1.9253474591466007, 0.5764735986147382, 0.2514937491170546, 2.1330699675207834, 1.0841339667202907},{0.477981687383906, -1.089875911824827, -2.3729446342944294, 8.382207904917632, -8.439240035155137},{1.0666737253716372, 1.9351693262113394, 2.731487922880369, 23.019448697764332, 23.07600714668192},{-1.5028314068685686, 0.36429762203996496, 0.7160715310326902, -1.6211386943512882, -0.7087320976761328},{-0.19523044103446607, 0.5586391984821755, -4.106509442683915, -22.889899637233498, 22.895883215800968},{1.0123252344044733, 1.2678402798773085, -4.899759270661963, -17.143908233503637, 17.16089176336304},{-0.056784280459150294, 1.5259264303125204, -2.3533509738146154, -8.255843079112779, 8.395485213086461},{-1.5158485774429094, -0.41074690398612357, -2.3088942244102024, -5.656203659221873, 5.464755799117961},{-0.866687848672447, -0.09232217605764759, 3.7216389909176364, -19.828307875580133, -19.809572654803752},{0.5984606228520133, -1.7768119368476198, -2.8578608058496897, 20.659814205471438, -20.727441437534424},{-1.5780181290045823, 0.6632912966406739, -2.173517764999419, -9.901637280852961, 9.797562705607419},{-1.640312915471307, 0.05768424895545232, -4.0578432894310055, -49.12774763848745, 49.10038990723826},{1.3258233350346988, -0.19895211395348267, -0.7492799349274541, 1.8791529268718568, -1.346473226802187},{-0.6354625501768754, -1.9420169448426097, -0.597621014221744, 0.47856023594744856, -1.8964801767507624},{1.7570723064881686, -0.16138898048939554, 2.498308611708091, 9.782147083432994, 9.62440361137834},{-0.7231998282457883, 0.16781921047429238, -3.094578226813287, -9.848503356195229, 9.823347884139},{-0.13398870664431684, 1.3691223478118593, 1.6979090352680952, 3.2358829108645724, 3.5110513016182225},{0.16370808642267187, -0.357176769796697, 1.2806666753793374, -0.27578615226848685, -0.4205150521744576},{0.2571817431118202, 1.500416789781998, -3.719424159492324, -25.61459496432572, 25.65721308483309},{0.15257958562304186, -1.8005025058436324, 2.808885263886001, -13.611826543792226, -13.729542985907685},{-0.8135929988316284, -1.6484683004234753, 1.2480236703183722, -4.168401322525273, -4.4080702983713484},{-0.24098334426872436, -0.8715760539890185, 1.4764502631630556, -2.363018802052956, -2.5070759271565586},{0.7421371616391803, 1.9204056362206714, 0.32275125331936305, 1.4117578151753718, 2.265005600357536},{-0.6862200664889893, -1.425682048835112, 2.895592317364965, -19.086172640242218, -19.127039953370968},{-1.7369107920279379, -0.05534241430084852, -0.2621141573558745, -1.7822466914856212, 0.40324552405323977},{-1.0054711594766859, 0.6202659777687591, 3.5809772888685405, -6.938729774004143, -6.893455483811417},{1.6379725939458298, -0.5058879492586841, 0.2700891039142217, 1.5597780721026782, -0.07665528618349832},{-0.7201886700756255, 1.4384750997894624, 0.9263948629672889, 0.4795836657925985, 1.3343685340654856},{-1.0783713596026832, -1.0717203696521502, -2.651835920844717, -0.12296965718713349, -0.028658299054955094},{-1.3884587105443598, 1.7932046943863353, 0.8442488127065682, -0.21310091364281658, 1.1546330518732293},{0.19712847002293277, -1.3088643467650312, -0.8397395173535243, 1.503725179357423, -1.98379829104992},{-0.9760804084283832, -0.37718948114195494, -1.1677531842775428, -1.1731232516808856, 0.7521682688074208},{-0.5989850149134719, 1.0792620058724651, 4.319140454500987, 18.029001219432693, 18.051340903089017},{-1.4616301142343313, 0.7807490073177692, 4.117177725812622, -20.91646340742724, -20.879934097018445},{-1.9103164121454348, 1.0442578350243528, -3.3182165856197985, -40.80515346038066, 40.77378710098822},{0.36705976040067423, -1.348791511934897, -3.3157502754064074, 23.61206787567881, -23.647711412325407},{1.751084725354764, -0.5612198699471755, 4.279857141007474, 42.98804748303378, 42.956034458858284},{-1.9378413996182031, 1.9578800309684286, 2.7527015124254923, 0.03296581899554063, 0.2813390673417864},{-0.4851856136199433, 1.371022947146828, 0.734439594774595, 0.47790086643250085, 1.3684619395790107},{0.07716101339858028, 1.8920038675220119, -0.40468944785538685, -0.7031791483896197, 2.0169743993069185},{-1.1072391471766898, 0.9978990075261147, -4.589130785695958, -103.58267282075853, 103.58156174045885},{-0.7002456649078235, 0.112011845505541, 3.3775697930026656, -8.631334020573107, -8.603611429917905},{-1.9253359021329484, 0.255496500067824, -1.4017538006163495, -4.635145492459524, 4.224089708064054},{-1.0160318431996083, 1.4234556098019486, -1.0455084744240328, -3.3983740764047594, 3.541588842576301},{-0.31178624560130364, 1.5451880267475673, 4.278781883497398, 44.48364033143331, 44.509377130121436},{-0.48036199015141, -0.2696662765697322, -3.889731445556574, -5.15894283894375, 5.143604132767778},{0.19669836701890242, 0.14861506270176195, 3.5913947138010744, 6.26545059608066, 6.264125426681799},{0.3669464083787899, 0.30469449949689054, -4.2237728953902085, 2.1305292505538596, -2.1206942162572986},{0.5437970326971198, 1.3690474008526752, 0.3508670344381848, 1.0678849514399318, 1.6489250566727216},{1.0107365067517398, -1.5682148128084212, -4.954951290870977, 182.9432914713502, -182.94722081459565},{0.06568271590822228, -1.2447599933160838, 2.4812167685952966, -6.993604209247904, -7.103211460839468},{1.0340513268512175, 0.6422271061062736, 2.933608491133823, 15.763527493877934, 15.742680602727745},{-0.6957270469605779, 1.4888633001036502, 2.326785881768286, 3.9562068049255132, 4.1694424190606085},{-0.34619461339506064, 1.5739392296091541, 2.611889695815699, 8.293406182271196, 8.434335782519748},{-1.2659840143115875, 1.5051903239031774, -4.656546639778188, -145.86227423290092, 145.8645465038735},{-1.3221905300525103, 0.429321486191522, 2.986748705148152, -8.893021096894245, -8.8046552102028},{-0.40641568860839494, -0.6912379309051855, -4.2775633189593805, 10.255188622159537, -10.270420139470705},{-1.8160370246924789, -0.8382008757999737, -1.773143536391986, -3.104746268822976, 2.654060968950812},{0.22329195650802536, 1.428722968623605, 0.4232810419047697, 0.866568041152257, 1.655998246731537},{0.25669125859198827, 1.5810648504017517, -4.361801069574811, -51.90253748935541, 51.925978791861795},{-1.1349605362775144, 0.7678279584883381, -3.3741237557639074, -27.78575001047633, 27.773176411775708},{0.6014741855651362, -0.7088997658866687, 4.307680200405146, -3.980319682678889, -3.9979635389150268},{1.9163345120060247, 1.0962838616619588, -2.1157027749384834, 3.582913003960792, -3.2197462535713024},{1.0452626102145688, -0.5129869741854971, 4.7539609490067445, 30.89014914810963, 30.87672094157393},{1.5601345786330016, -0.26349945888024595, -2.0049041165043624, 6.857900584628548, -6.683278573427296},{1.7176214042951767, 0.3983354544329756, -3.8856051108086285, 32.143964347634856, -32.10051232967764},{0.9747463968902297, -1.7111015643284282, -4.4274424058223305, 112.4212075220637, -112.43000328535132},{0.18906669708456025, 1.393681546488478, -4.915952841246259, -82.17860404963552, 82.19020358646064},{1.3639835739485822, 1.4212387385962222, 1.8583276219851017, 8.92635530069256, 8.935283281255675},{-0.5678553220636402, 0.07288333983525064, 4.24541664608541, -17.275358550327287, -17.26617691780076},{0.8269965367880161, 0.33586081627440123, -2.70208887547339, 3.700618249899233, -3.62263090136663},{-1.3470959517804046, -0.6600164890264868, 1.0856910916792586, -3.088019958673621, -2.8560149732888878},{-0.6409701288223577, 0.9164035070998411, -4.6451371060618545, -81.04255880439177, 81.04520522674417},{0.7166550323765266, 0.9606944167446665, 1.1766138785582312, 2.6825138369191457, 2.7577563003638392},{-0.8328012393149713, 0.4277565967049548, 1.829178447683998, -1.3626527993456576, -1.1602760246530173},{-1.718421145661268, -0.22648278580344927, 0.985344333008646, -2.8834184914755303, -2.326461995260728},{1.367687805125017, -1.1396598842574903, 2.575465413506275, 1.5932780647437577, 1.4024228004035466},{-1.0380069447329014, -0.7051955347102341, -2.0945663567291355, -1.4588482258167224, 1.2442188195129185},{-1.7968103713855061, 0.6261322389926978, -4.060899961302195, -70.30753827852789, 70.28736339383241},{-1.4907305909112494, 0.8632061176409804, -4.520360494197514, -108.12997992343011, 108.12314925744742},{1.0166101443014797, -0.4071340980110907, 1.803152400164306, 1.9666797163324525, 1.7320771042018086},{-0.5247992300555322, -1.9440842724431868, 2.805550876414041, -20.37003991238764, -20.455868973445234},{-0.44593780061930643, 1.047444173239513, -1.6893891287919645, -3.988677407201858, 4.09973489786288},{0.8406414962268842, 1.780544985184143, -3.366733899909864, -13.575726147885272, 13.666162693362818},{-0.04344345664180249, -0.01969861951562546, -3.1241029505459177, -0.27136109296250116, 0.2685843339802908},{1.6913133847689559, -1.3382479219315686, -2.954680192059928, 29.08629404207388, -29.067900984368272},{-1.452830808832861, -0.9348188542237417, -4.284719843526727, -18.815674003973662, 18.782778206509512},{-1.6911414859127216, -0.31603692647384163, -2.8166866413618403, -11.556824122099673, 11.436787293758016},{-0.7304980817121705, 0.7159926120983688, 2.4067552836510906, -0.14565968398950302, -0.015320467819437411},{1.3981245735107963, -0.7864138092689836, 3.9844306538318808, 16.461476410494722, 16.420837371146096},{-0.5913600859202575, -1.649319599728717, 4.723354605619505, -126.08413204342176, -126.09353235409756},{-1.246869234694132, -0.3719050711044003, 4.2434349005880705, -56.377402065908036, -56.36483916587129},{-0.06721470111039518, 0.7728293848214935, -2.805659727215083, -6.924984195197021, 6.967650503988179},{-1.9939394245337272, -0.7289667791788266, -0.11324634588633842, -1.924009577004366, -0.5073568653728647},{-1.6694330820531722, 0.9408794296900145, -2.53769710442034, -16.539680668814853, 16.48208979201752},{-0.3541570524418136, 0.6466038444206692, 0.16888521558687675, -0.24949805702941646, 0.5957504463168865},{1.7154192399440342, 0.9298503354598173, 4.2097543274005815, 89.07205177000387, 89.06038605909943},{0.6694295127239545, 0.5018330492130181, 3.340195184817663, 16.53219823490272, 16.526260285221735},{0.2752618168804908, 0.3187491124526711, 1.5312280174130386, 1.3686066685307088, 1.3780116625064325},{0.5829473086211969, -1.3528331120151091, 1.5534378805436067, -1.615165139713495, -2.0246205305887575},{-1.320294091924389, 1.8101179237997034, 4.42357694717731, 20.405427424413027, 20.442965019338025},{0.6153145767511696, 1.4086726872544375, -0.36145884461440314, 0.1356129204445491, 1.2744165628418624},{1.4388638609240965, 1.6744351470611551, 1.0593788225564342, 4.449444965978962, 4.5311107199797975},{-1.7904264854039473, -1.2077399834965727, -0.9827973479339889, -1.3394968087867227, 0.21739496049859341},{0.7083322890785393, -0.7202768208637647, -2.2291042861420154, 6.63634643091496, -6.637631958615971},{0.9374515481024503, -1.7935007601344788, -0.14088723697707373, 1.2002889034495148, -1.9438423349920413},{0.8330964686627036, -1.3812975643502208, -1.014979917749236, 2.95576086773917, -3.1544342666221143},{1.3606977965879734, 0.1859295806778123, -0.006681791419158145, 1.3594858198657798, 0.1768417647157837},{-1.0856978751753052, 1.55057987278827, 1.0412470045172206, 0.19312486657715078, 1.1237683390389481},{1.3820127066811665, -0.49437056242974253, -0.7620914734149222, 2.2174395468552053, -1.8031864228432721},{0.9776349408827918, 1.7075775596200113, 2.7046947713692093, 20.047218485082315, 20.096044885327785},{-0.5144101039620215, 0.18537492437936498, 0.25174124698401634, -0.483635409587909, 0.0604095765396685},{-1.6264543805308551, -1.7941332830982568, -2.307458402909573, 0.6722923093011026, -1.012688172498489},{1.1632449506911566, -1.8329536203963763, 0.6555540292314319, 0.13274520332570283, -1.422744336914294},{0.24392017017346745, 0.5445425150413774, 1.4325958667582945, 1.6157785615807718, 1.687533662281782},{0.901523815104599, -1.942009410504345, -3.631961920977398, 53.710354880270714, -53.73789051242993},{-0.34126377812137676, 1.350943942316329, -0.8962705307780832, -1.867313246065914, 2.279352392228268},{-0.8347974750721259, -1.846893215691634, -0.8605486707942553, 0.6294450757730314, -1.763612437355755},{0.6638568468059747, -0.5423750346921374, -2.321927810598295, 6.154911711883088, -6.142996251527567},{-1.8298093643556805, -1.5215180775733903, 3.3923211662856403, -49.8308635316758, -49.82049553409718},{-1.3023167437084628, 1.964323918742576, 3.5036632089760964, 10.952419036956027, 11.05070234500403},{-1.8063164841769006, -1.4693631233120865, -0.7447442323749911, -1.1325331309953472, -0.4229421236320343},{-0.8424548865830288, -0.3508589992182778, -0.1060036750385116, -0.8099305240079091, -0.26336145337644556},{0.8005784919454046, -0.9004454760786837, -2.2451855770682965, 8.02538838548406, -8.035965086502518},{-1.701137691894028, 1.4496345496290752, 3.6451568405813735, -4.856018794651888, -4.7737290889521695},{1.9367232442448072, -1.8542444762023937, -0.5153649551330561, 3.19814431187228, -3.1488811810371597},{-1.2057941105734251, 0.4790982789369447, 2.6863166200923105, -5.3904409589327695, -5.275646828164944},{-0.376336617697542, -1.6842760330000346, 2.8054245310567216, -16.995628473666606, -17.074734074662054},{0.3768433917453873, -0.3406605364401183, -2.7143532914761836, 5.416503790355506, -5.414106756439242},{0.9284862965995893, -0.15379348494252643, 4.893092891274694, 51.66267428035915, 51.654559135002984},{1.7567135699925553, -0.720654704182133, 4.721519962682196, 58.20586943788859, 58.18381680206443},{-0.8433413354355264, 0.6571590460712389, -4.556451183387035, -71.45846135254024, 71.45650657761172},{1.5897456769669058, -0.2929758850646018, 2.997740774596723, 13.04074332539781, 12.946796129958251},{-1.7593037175996216, 1.4439901531692998, 4.782925242471553, -18.8460261993296, -18.819209906303385},{0.4048904204121144, -0.23840199653656602, -4.076341237169061, 18.95585191314354, -18.953026697929772},{0.28950671468616296, 0.08916645341214924, 1.5985704776018625, 0.9567035374323516, 0.916197673595224},{-0.007379886613011477, -1.369832748873719, -2.0627305749934437, 5.271970272573102, -5.447022842990013},{1.7109418944411563, -1.853586401670485, -3.317674763458993, 49.180970156458216, -49.186139164532285},{-0.5818057999899329, 0.43159659862328903, -4.355485966858408, -39.47535642804378, 39.473428312678124},{1.5162714300519293, 0.761035153938828, 0.6354426799452586, 2.349640040323127, 1.9495906685837},{-1.3319400637102694, -0.19075268488346908, 3.9048471102503477, -37.80662345377723, -37.78363533633539},{0.013480789577724916, -0.7759302168795692, -0.25980695468022486, 0.21780596111421932, -0.8058073010813598},{-0.8429515763119757, -1.748117213885709, -2.8634843050298615, 7.856435244014609, -8.00430641447912},{1.6065705034417475, 1.0678819702758755, -0.968863512316136, 1.2172044026636264, -0.20221196249216078},{0.8619861646010669, 0.9764032523154662, -0.267564499316868, 0.6286465901380892, 0.7781643132788916},{-0.09848729936761047, 0.7155725662715517, 0.7586828942476584, 0.4682758722186007, 0.8494861046337487},{-1.5252199997368143, 1.4699161020091003, 1.144417382537287, -0.5636837226567293, 0.38999569040773796},{0.7872017276471341, -0.28625515367564236, -1.960652424922507, 3.848155824318868, -3.77763930269083},{-0.21029298327481571, -1.0220455874693966, 0.3795150055605472, -0.6228801800939968, -1.1782757583880659},{1.2022582404532725, -1.4343627663952465, 2.7046929860067337, -1.6467666380250385, -1.8231324770831971},{-1.0052424214638054, 0.9503754543389813, 4.2775773890417454, -1.990579896938577, -1.9634432776109492},{1.475306690960946, -0.07312439173968066, -1.6551978518364105, 4.186279932035011, -3.9183870423469163},{-1.1509552089843686, -1.5010965613545202, -4.915246480032334, 23.861671887307793, -23.881121796326013},{1.4364081586330464, 0.1334722247440796, 0.48857570236604086, 1.6791223178155275, 0.8797716719562775},{1.5591214077238806, 1.966492056623946, 4.1892631793229125, 116.2966094330771, 116.30278413294508},{1.4082285532992822, -0.154623438600477, 1.8768825664823723, 4.214578069614776, 3.9753577265844964},{-0.11400174499601978, 0.43027414076867876, 4.23392639793826, 10.905487877176377, 10.91337735431122},{1.5484947861396767, -0.6796389786007733, 3.370992365914965, 12.68334021751106, 12.60679150742429},{0.6988129806391097, -1.4018806681993048, -0.9766748355436778, 2.6569388038637425, -2.921686778804002},{1.8730902554050397, -1.2280626276212097, 3.1504961813381485, 7.5963510149613995, 7.4635259398605776},{-1.2397147252331027, 1.37418681675956, -3.1549100890206905, -30.64634198930773, 30.652076179812063},{1.823790313902213, 0.6268130500228177, -2.0531086604671422, 4.820724654968453, -4.506225658976268},{-0.8210854433321568, 1.8572982572782673, 2.377769445734133, 5.461396725027782, 5.709836223516493},{-0.2294720174861391, 1.33353799526832, -2.233636923286704, -7.235229042567433, 7.353516538121495},{-0.934890476710327, 1.3402538417451821, 4.099918590232539, 12.210021274399054, 12.247729572379786},{-0.4419495554543582, 1.744748501890446, 4.97964223844799, 94.7205210235162, 94.73555790141131},{-1.0588455445460938, -1.0400688872550534, 0.33854609026979343, -1.4789823091837255, -1.4655981966109528},{-1.881233360025843, -1.8307829169248842, -0.7506683994757815, -0.9295678655055784, -0.8226928652969225},{-0.62486683865898, -1.2554201767854027, 3.5779527967084803, -33.648496040276854, -33.666109175649495},{-0.12405767369252585, 0.7483201113182023, 3.914558218503636, 15.637475405252955, 15.654878783704854},{0.25226656201554887, 0.0186440690292069, 4.493030832561374, 12.109923935090961, 12.107310473292065},{-0.20470469511240696, 0.9187285667472285, -2.7197529041402784, -8.501408846473945, 8.548456617545755},{0.7321028097348763, 0.4550414631424111, 3.1969028266355313, 14.522459962426066, 14.51113129874529},{1.354048393798247, 0.9873543078444302, 1.1579614194080365, 3.784448008732194, 3.6692598991170424},{0.3376066752003064, 0.39411728105330024, -2.870160320658718, -0.47767853643079805, 0.5191598484587474},{0.34441792778905755, 0.16838959212519056, -3.2640383978909675, 2.3118092642061536, -2.2922027440483914},{1.4768027103954928, -0.4001618954255397, 1.8430211836044963, 3.5484087192365212, 3.2512132713608404},{0.818442314536139, -1.2715174009227097, 0.08503704293251513, 0.713146856348303, -1.206435707920417},{-1.5150580885737504, -1.2002017544930683, -2.671824334868147, -2.3712563786171845, 2.18356132335874},{-1.761280487714587, -0.43378665532097904, 4.719248517907609, -123.02186580942558, -123.01002206787153},{0.19916745631786492, -0.216321950856998, 0.7186305350620215, 0.0836615122745677, -0.11885604487158605},{-1.4663489866352037, 1.2118131484734347, 3.301233703449469, -3.5041573989639687, -3.4055000855852136},{1.9498455388245022, 0.13953373231149602, 0.8996931918423048, 2.9368555015493785, 2.20061179542413},{-1.02392444640927, -0.21854405330068838, -1.3871272713302933, -1.7672822224349884, 1.4569237059686122},{0.8830745663414294, 1.3762374490162697, 2.610618683143783, 15.353635759875853, 15.389877838153694},{0.6267067769317438, 0.15459196726413893, -1.6444434203918412, 1.2977774511995794, -1.1468930224447695},{0.5593055618312635, -0.1730914685751881, -1.9416957469715053, 2.580312412208324, -2.524905956584219},{-0.8964968804421496, -1.0069077828477575, -0.1519771893455779, -0.7532532724395347, -0.8817863227322981},{1.0241542448935328, 1.3198250704148484, 1.7641000078185858, 6.814773321334613, 6.865433833366694},{-0.5944418891030272, 1.812341096420098, 4.998328972587652, 90.21711757629518, 90.23336147382142},{0.755794464302932, 1.266024378585477, -1.3688404507920597, -0.7456261935517134, 1.2599805059651532},{1.0232560354443314, -1.0256614823963797, -0.44781178220601436, 1.6023906822339529, -1.6039278228487968},{0.5693892533417468, 1.6470185864280618, -0.17477238913473236, 0.2887864740251744, 1.572216184180252},{1.1941685101858504, -1.585202713922392, 0.7619898864619952, 0.2297150361265834, -1.0675196538378395},{1.3707854825148438, -0.6327400212389616, 2.978688962165524, 7.306682201075842, 7.204783958101906},{-0.7987071649730522, 0.37769326536260106, 3.570127136248173, -7.4939994588854715, -7.46088111130962},{-1.832678660027323, -0.11853223538790059, 4.180133155587919, -63.79288475283899, -63.76666436241513},{0.022492743602296805, -1.6450197564474212, -0.2946595610574043, 0.515241853603871, -1.7236757941366838},{-1.083741202067765, 0.7564683650168198, 2.256291059673506, -1.6587071649549179, -1.4659668663666028},{0.8588801401327073, 1.9419202803286146, -2.6610173052519355, -7.651751277772275, 7.847463086687748},{-1.666872829472344, 1.2118615537046455, 0.029573089956268284, -1.6317580642878424, 1.1630897540958334},{-0.2585754322866245, 1.9183298844500483, -2.7323360022003818, -16.674155316144393, 16.78215075007665},{0.6410437534676636, -1.625835411047663, -3.182864251040405, 27.313302887349195, -27.35413896115238},{1.7057727640928992, -1.7366495118949377, -2.6347156638673312, 23.99145425080333, -23.993669329071636},{-1.4404670403888389, -0.17569500051919995, -3.5217569353252625, -21.426246573279062, 21.37849306330345},{0.9236209908507709, -1.7954472839414177, 4.855422059759405, -55.97587031125267, -55.9970411032302},{1.6750384279376602, -1.8328473741660491, -1.7449092695270512, 10.028211567637381, -10.055774610004727},{-0.9167113162289455, 1.7331181476090456, 3.078898869836813, 8.811120299883857, 8.93303866639426},{-1.0310908783384765, -0.12857286993359107, -0.696777720933655, -1.194665885551033, 0.6169352977335492},{-0.5098650197786505, -0.9494207627885245, -2.5890961726335955, 2.8721548494023637, -2.981729519149177},{1.0802451581588746, -0.8840296087309873, -4.1906876559309065, 64.889541426979, -64.88657153333816},{-0.7414112331463376, 0.8168946700538124, -4.575358357960138, -75.62639084650338, 75.62716852265075},{1.764191978016476, 1.4342837673728623, 0.5639936104597929, 2.904792938725156, 2.717097459959641},{-0.7537643340348257, 1.5596392619578938, 3.7302873586727507, 16.771156177540966, 16.826645342659603},{0.550559016246257, -0.9209169598687765, 0.6440074244217868, 0.03379893769044329, -0.7389960654786369},{0.4088262596980461, 0.8174408686372114, -0.38119126950875426, 0.11968765011788379, 0.7179107163780225},{-0.7113061518928092, -1.4626008703683628, -2.2596201074733164, 3.485027614885977, -3.711962060797441},{-1.642611488024851, -1.7618853891042847, 3.932593996712688, -86.88023281286297, -86.88256972052},{0.015906798851798687, 1.2414181207061366, 4.785974183170193, 75.31998401446381, 75.330212118799},{0.31444883183141314, 1.1990121287979867, 2.678903659725478, 10.99453350628998, 11.055248483778987},{-1.8498023047483985, 0.8801650644585508, -2.5664632884648264, -17.808909952650634, 17.73443530749315},{-0.17467420207498296, -1.4094415667062927, 3.470125302473626, -25.438141161152856, -25.476558640990504},{0.4228556683678124, -1.2537572422062064, 0.8323886588124827, -0.5903688004740733, -1.31971043289311},{-1.0207761387085958, 1.6054147997306005, 2.2467981639932377, 2.6257395753036272, 2.9034257474839755},{-0.9557383845821978, -1.5581752683402332, 1.2731571067998182, -4.405665944453711, -4.574315983972093},{0.5413307536221459, -1.1938529954779131, -2.828032167563272, 14.653550474563218, -14.692133524460168},{-1.5066439561318719, 1.2999126329160098, -2.770606671864977, -22.41446806473749, 22.40152172214653},{0.5543383011432779, -0.7056560849298583, -4.429122077435454, 52.82925368093551, -52.83105813858664},{-1.2584403639975923, 1.674173236684727, -4.197676923859819, -97.55260354200433, 97.55885219548337},{0.40302537110080117, -1.8489987972912996, -4.284692210761808, 81.71622542676315, -81.73614784842876},{-0.10192643791173994, -0.3432173866929922, -0.4548856520407316, 0.048909997045554945, -0.3313628880758787},{1.3068992544038727, 0.29265876235765953, 1.8951583692742826, 5.397628647170992, 5.245193847970184},{-1.226215876234095, 0.8650745227441061, 4.45848979909433, -15.60564927884117, -15.581432474871129},{-1.7832674059124332, 1.9676371192438182, -0.00928152557646289, -1.8016071542403156, 1.9842735522720503},{1.290039875769604, -1.0831800388284427, 2.6896994699745225, 1.6038106011381412, 1.4426657824194145},{1.4419490886261368, -0.004304039300537799, -3.2788280196356525, 19.222217441806063, -19.168057927986283},{0.3343201519874013, 1.7677758519414097, -0.813083174391525, -1.149985533486423, 2.0822411546000983},{0.2854434210449379, 0.18331894927870085, 3.7041318406153323, 9.520595608770055, 9.51808114255591},{1.7766931681551301, -1.3713391922620701, -4.086816974762516, 93.73613064584339, -93.72932369872879},{-1.8252465181577398, -0.5159655942025292, -0.32350634992945704, -1.7517493227578718, 0.05763099978725872},{1.5914890863290885, -0.6903210409018459, -0.7484037846006535, 2.624624613850435, -2.1982629486111884},{-0.3461351340593497, 1.6238519670852702, 3.283478923321848, 17.0003897566048, 17.07425950243377},{0.4105986103901347, -1.2629550952309068, -3.6300695522613475, 31.548107116422415, -31.570706786243765},{1.8714424807026022, -1.5850973503093275, -4.878559718441615, 227.1669870195206, -227.16480851614853},{0.21365202710805953, -1.8963333712388075, 1.8503397986182062, -5.186765621297823, -5.518421031097894},{-0.23686730842158354, -1.9696669221706413, -3.4449652687123518, 27.11967088764649, -27.19007228230103},{0.9634427512921522, -0.8655281161595134, 4.162649669335913, 3.159327418819938, 3.1308571868024693},{-1.5527395893272011, -0.5205916545053184, 3.1596860595306726, -24.449058306123213, -24.40525491558507},{-1.9264292185947232, 1.1375814515746447, 4.446924648337356, -33.68755325734577, -33.651659788058254},{-0.3899904421283811, -1.5502811856799932, 4.560474705614762, -92.76691977242531, -92.77905304147761},{-0.6318287510551917, -1.127035346897474, 4.754366588061366, -102.09121903160292, -102.09548474081123},{1.952747401543303, -1.046731400745864, -2.939028648802071, 28.365269164609483, -28.317325420876507},{-0.31190539188351396, 1.8490807727821106, 0.5328316995171347, 0.6752960407591795, 1.943666502631432},{1.061255848900755, -0.34223846971287264, 3.0676672006676284, 7.759107886374439, 7.693803895715263},{1.2496899285147012, -0.0732160349397315, -0.01824584361809478, 1.251233914375494, -0.09603113466287015},{0.7798064695942526, -0.2297184169799802, 1.6572738531199978, 1.5388409297072887, 1.3463668994821316},{-0.08086911885251458, 1.6422250180196079, -0.021220690787307817, -0.11573909283535952, 1.644311020773099},{-0.9471000166236199, -0.5305879331725214, 4.545087839434256, -69.57818708428681, -69.57376404255669},{-1.3766595252597313, -1.8200646697261458, -1.0808364209926684, 0.11104651091641093, -1.1957321109193748},{1.865287734230399, 1.6700718754861326, 3.3888669744867066, 52.383816581514985, 52.37722865314299},{1.8795708234864463, -1.9837930385517117, -1.3576520108018024, 7.495149161620683, -7.521961798244388},{-1.7057090591060724, 0.22180929319931897, -3.027149797046908, -19.926325455566325, 19.85442525306093},{0.2072492671645776, 0.3675069758336593, -4.427230923383608, -6.703297632803645, 6.710164548839105},{0.009333611586984425, -1.5630323158554422, 4.26149358646415, -55.07982524973007, -55.10199753588708},{0.3099767494990715, 0.3671085935673766, 1.1136399011487015, 1.021625783362742, 1.0403856859225542},{0.6516974512092801, -1.1594353173284069, 1.3726836444841863, -0.7722540006665923, -1.2312420268579645},{-0.17788451428078766, 0.4717621209354257, 3.1822481276716506, 3.5278760066932597, 3.5548313204610094},{0.6837857235632754, 0.15204361023307955, 2.7905383278518574, 6.824062111892702, 6.791419442990783},{1.393328427582214, 0.6675787621149869, -3.2622389636154985, 9.513378437570676, -9.434440449382937},{0.8219243902468154, -0.8284808656171052, -0.30390329766562374, 1.115844325504141, -1.1206825599476686},{0.4878551473892232, -1.545582585586844, -2.6439712406591553, 14.266590381704198, -14.341771996631724},{1.869105069346766, 0.0508874632446652, -3.12545005043126, 20.742695488434993, -20.658374861048465},{0.6324347542372664, -0.49800352422061067, 4.013578756962961, 3.730232802462867, 3.709807347065203},{0.09812252861821635, -0.20812992843432676, 2.382307544964287, -0.5815433581255398, -0.6098218706045031},{-0.21668398293402769, 1.6263604076827907, 1.2974270512425328, 2.3278236322886263, 2.8314058505024304},{-1.7308627055775605, 1.6312724068328928, -3.724637308644881, -69.69186424885439, 69.68946194684302},{1.125642392914799, -0.3984414676925476, 2.34041998069773, 3.849582895053559, 3.702833141303964},{-0.31177931370476775, -0.04587674146809584, 4.307799628434255, -13.28457650700308, -13.28099662319706},{-1.5516871551101312, -0.766196728117924, -2.470720613011084, -4.744514901010538, 4.548598250533439},{1.8540147820269364, 0.3974253816452036, -3.7900417698635502, 32.25848337274273, -32.20761285211186},{0.37927700055830016, 0.35201830624754704, 1.979984697150047, 2.650133272983755, 2.646369628256129},{0.38586076343636355, -1.412593071007373, 3.497738220654581, -16.93472882200408, -16.989160395096455},{-0.9913221382059534, 0.7595003557535733, 0.1710902712390352, -0.8752884995642214, 0.6002092686405028},{1.1299579938393927, -0.6225945450388459, 0.6233881980288132, 0.9429700661076273, 0.003383082264099113},{0.942793715580815, -0.47160053846805994, 1.1030936567051555, 0.9446425941322232, 0.4752859227807419},{-1.4388654070837066, -1.0113295429510891, -0.48680097460440486, -1.1007542366884029, -0.4051094596907937},{-0.007075382207806458, 1.3273313210342175, 4.942396755633361, 92.48289375941735, 92.49241804867273},{-0.048735171868698135, 1.5954992361469902, 2.1083700724490937, 6.268818291203587, 6.468487107794002},{-0.4023182983049556, 1.5992465218837548, -2.991236606782572, -19.89580844972431, 19.95592451611119},{-1.5425127344567262, -0.9897252272975825, -4.499621915945193, -24.884838418304135, 24.856697157802216},{1.7948274954929246, -0.30201309021029954, 2.354596660517009, 7.962091776407301, 7.763034949297454},{-0.9298067602174698, 0.4174220405317701, 3.621579076445437, -9.598729086882107, -9.56270362564543},{1.9990449486259885, 1.5417937782505904, 4.940461444624271, 247.5678029473939, 247.56453300815863},{0.8874970376618814, 1.0103744915770774, -0.6587145797691196, 0.3723710905145806, 0.6098080439138538},{-0.01674003994248552, 1.560165716627664, 2.583539473309332, 10.160979090027594, 10.28004537452929},{1.7852493399610503, 0.3877607239105245, -3.2079557808799337, 17.322824887207844, -17.234950108603265},{-0.5642659123713114, -1.8139971819227045, -1.0393615834411167, 1.3461796740302894, -2.1873247291912516},{-1.7406695778952472, -1.574540685073729, 4.964628961138432, -237.46144459686235, -237.4602849274343},{-0.21057212886937116, 0.5613435123150525, -1.290948373201331, -1.3551999364742435, 1.4516655211106357},{0.9156583446728424, 1.3720058305988583, 2.7817797043421946, 18.456165425579712, 18.484426201843327},{-0.5154242979065207, 1.3738645664222524, 3.489553131872876, 14.037276421706748, 14.09492713636372},{-1.7747851559250039, 0.47420121051640196, -0.9066240041752502, -3.0468319209366546, 2.5215450011455323},{-0.587438707308364, -1.334950872552668, 3.6019635529816725, -35.23698168310093, -35.257366432172375},{-0.14789894163115047, 1.0248005687811115, 4.870578599498263, 57.16788570935381, 57.17687905601858},{0.005051333563980354, -0.33390175970844593, -1.3986369946061044, 0.6457231220912862, -0.7269272450313996},{1.6889010176945525, -0.4204079813622905, -0.7993833604095464, 2.6308909565990497, -2.0605687197320273},{1.6511173310269296, -0.8724424946204998, -4.760071580204396, 147.32154356699812, -147.3148742199121},{0.7645883111633389, -1.7208884995719291, 0.03711405910655685, 0.7012311426938805, -1.6936903665886172},{0.6113956658247623, 1.390723744741087, -2.791774380802699, -6.294017535295524, 6.416772133137106},{-0.2103692204323735, -1.8628055446916392, -0.6165666339720328, 0.9710716712595, -2.0901601563400134},{1.4707289549872846, -0.8754183478797055, -3.2589774147107704, 30.53823163877116, -30.51535523712628},{1.9012722880423372, -1.5540716137938269, -2.0591244691975277, 13.565544546217897, -13.521253680888622},{0.6913577005517113, 0.2351740477507831, 2.5134579601215377, 5.738672877877644, 5.7017276120410925},{-0.5125508053735637, -0.888234318085998, -3.6126815202134956, 6.9435169545423605, -6.9813093022551165},{1.3542658530216856, -1.6401083107530638, -2.4605142150105994, 17.521102014177867, -17.54551039615458},{-0.2096609192487373, 1.0751543525936147, 0.8626151640107835, 0.7541953599528977, 1.2964604975915195},{0.4043986481709978, 0.39961533601017596, 0.4796602622867354, 0.6509329483490984, 0.6479721084880471},{-1.4445847139633128, 0.26720419286263697, -3.3843950260025277, -25.268962134759438, 25.22905112073724},{0.7211351499274095, 1.4308336339163925, -1.0730121031326374, -0.6696791836886093, 1.4056027861922458},{-1.2550302984433483, 0.2752067637212363, 0.6362085539885101, -1.3305660388508005, -0.5206185710577622},{0.8794374581952336, 0.5097956538058686, 3.174558949181554, 16.62036441166348, 16.604908748386798},{-1.2329657730310326, -0.23232822371876827, -0.11282934527183297, -1.2145531188610241, -0.09439854133061001},{1.915557726650936, -1.592857462277969, -3.120306344286321, 39.74574557546698, -39.731500410137485},{-1.8354708188599957, -1.1595966259426786, 0.15524118029429346, -2.0383736192327437, -1.4596842876440972},{0.34747881411447423, -0.23508615487017148, 1.6213481728565684, 0.3419149837595292, 0.22678145883762202},{-0.4933188139189697, -1.9197253787481627, -2.203320361172901, 6.324833531393255, -6.591320146790007},{1.9274041192152174, 0.07584755216463757, 1.27369865626223, 3.8388861194000623, 3.3208301447264725},{-1.6262978460258122, -0.34780264450601894, 4.553410326423085, -93.73276585612743, -93.71930173147443},{1.6300420043096584, -0.13609349983168095, 0.9559344395534, 2.2824525482583047, 1.6034569342309806},{1.0543299036002667, -0.13762977197157356, 4.77259559569263, 54.193803084742996, 54.183721016523094},{0.46681604917042385, 0.6471873658782354, -2.2237680856426127, -0.773236064533755, 0.8937719363937173},{1.7445090571370478, -0.3735873248868975, -3.5372727655987046, 36.42265599528247, -36.38277237085663},{0.7630139516284808, -0.02040478799278045, 2.444683514926189, 4.313973322051394, 4.2460089364442535},{1.0784097076794876, 0.6827393303766436, -2.8476916088090496, 3.463299637151308, -3.361191733941724},{1.0504692867552579, -0.9974378444851499, -4.566850330320621, 98.54608488744803, -98.54553385707193},{-1.5127787974978075, -0.6017280687387232, -2.0470049376359594, -3.664407554679814, 3.3913802065447647},{-1.4567821364379068, 0.6233147023338734, 2.539745388599793, -5.364746969047586, -5.200655445903549},{0.12686812134534975, 0.680847635533667, 1.7856911601420524, 2.3620414348911543, 2.45493334384882},{-1.4509178937305065, 1.4796807554671143, -1.07411282552322, -4.284596679827606, 4.2944220929645605},{0.969767406919773, 0.922669431156391, 2.23647465426649, 8.859380313004229, 8.854348625738286},{0.8073409181622311, -1.0098278050874467, 4.861990062964788, -13.081848329820183, -13.095904266686105},{1.816180154027108, -1.8753984122144127, -4.676877903909567, 198.30048787905974, -198.30103908433205},{-1.1056732615693428, 0.813617998512258, 4.87835429978459, -19.19740936893261, -19.182804470789357},{1.6420276359339807, 1.4960548071693802, -0.9189500660833954, 0.8089015838312343, 0.4429977440217423},{1.4081238563517422, -0.9812870663998925, -3.799608370676342, 53.38861467755008, -53.379062268831326},{1.5055518522212923, -1.2727237791819244, 0.7610911738582162, 0.8981417561315994, -0.39974748588991704},{1.9310745454599698, -1.9741289032458218, 2.8923033775684095, -0.27996988740552453, -0.49650696305387854},{1.3346690626235134, -0.9915948856964212, -2.171796912381045, 10.224912415320537, -10.185811347732248},{-1.6504195671348676, 0.34449686771096033, -2.340977277205841, -10.427811007222752, 10.302137435825491},{-0.684898918979526, -1.7750211549204549, 0.5381200731869669, -1.788424676870764, -2.4248868831424115},{-1.8307176493129935, 0.5014830825082157, -4.315907187085727, -87.32824834416783, 87.31049717548967},{0.5732203933408062, -1.326772456482374, -2.8273422276460654, 16.033105048634816, -16.07769265263202},{-1.134486731186033, -0.4454925402593011, -4.517322770529592, -31.561135551848906, 31.54388499824285},{-0.6364887432797182, -1.8617629520041084, 3.1251774754935315, -28.408106703204762, -28.461931941275534},{-1.7380036536718066, -0.6623598400338964, -2.54671075757868, -6.959343029365826, 6.771301149549905},{1.9154019275738992, 1.2535912320246143, -4.484102687703696, 29.335242845975444, -29.299474385476778},{-1.3682647358966045, -0.4290949401370612, 0.47495535726737703, -1.737066295145995, -1.152984559257086},{0.8912578438980479, -1.5932435809761494, 3.3891425764703804, -10.361703009348398, -10.445524104512499},{0.020699792219944335, -1.610225238610168, -4.667201765354647, 86.75741132766157, -86.77235053353527},{-1.2175633627526548, -0.6525277512976817, 3.801779131120645, -41.87838254081244, -41.865764726785066},{1.267606025044174, 1.2279291775066463, -2.1139966077146117, 0.3149608069312615, -0.013613968805930021},{0.15720039572797617, 1.1293689770482827, 4.944645468273084, 90.32725483449816, 90.33417807374057},{-1.107594989414038, -1.1804397642381275, 0.370133200199386, -1.631299339004646, -1.6816090240767854},{-1.9375437402646654, -0.3611862214386523, -3.466996722891622, -25.2894128069104, 25.217668009937835},{-0.48368198402364104, 0.4915511998723958, 3.622079089135992, 0.13418189081872, 0.16024699763375594},{-0.2780565330546967, -0.8904384030474917, 2.8397354232106107, -9.979303159493183, -10.01509144556943},{-0.5718681565655475, -0.6678312944445286, -2.558894242264082, 0.5720245306215666, -0.6679652034190107},{0.35345753203689867, -1.919340405267866, -0.47135736723196686, 1.3320250248883656, -2.3093778450632656},{-0.2911637219498071, 1.1255283545302524, 2.3156455945449474, 4.156751144265965, 4.296582111309911},{1.6542566573792374, 0.5794673010019102, 2.8691754180525466, 19.712373875031115, 19.65138420197051},{0.03385322723201645, 0.8346964216173647, -3.92146494769461, -20.202409123121367, 20.219616872068674},{1.085213907485684, -1.6049605513293312, 0.5537377769350336, 0.3210395800381649, -1.2252655052167616},{0.9150960049457972, -1.406337292386712, -2.63448046745932, 16.158204046944125, -16.19345367438248},{-1.5004483561712896, -0.19446559200671132, -1.3555786541773909, -2.751429553969881, 2.3144840002463387},{1.5180759695818193, 1.167382938273239, -2.927269737752696, 3.3467650766020522, -3.202977482454852},{1.104311006292145, 1.4374163748496853, -1.6101852870849367, -0.579403193479366, 1.087368887122548},{1.1202558268487288, 1.9787826517618927, -3.7221046574207333, -17.7131422532491, 17.788086354331764},{-0.2983307722132118, -1.4592114741531819, -2.922218788647815, 10.738726438595677, -10.833307085080008},{0.47730490979969, 0.8669728061694237, -4.726563737688345, -21.992147420878826, 22.00405349137711},{-0.25410142294481, 0.08226546112902122, -3.3863057615114753, -4.973831123078057, 4.968017322217397},{-0.8057215000211349, -0.8477641305580979, -2.1598558797181266, 0.08689449302158492, -0.27761040755364075},{-1.8540739484333004, 1.3887440919855765, 4.236168327782146, -16.110464737683408, -16.063564175204277},{-0.3820183214690702, -1.0214568867065394, 1.399129967716637, -2.7643011174201164, -2.9221219757621815},{-1.4098436751792867, 0.18056530368124468, 4.056543070318588, -35.52407826771146, -35.49655027479347},{1.439396160237926, -1.3886263269411794, -0.8264820833761553, 3.2424987853548464, -3.2202826184659816},{-0.07905199965935306, 0.8986076343911078, 4.450652971294867, 35.105236068862034, 35.116646279399575},{1.1921022568498478, 1.0539751941712234, 1.9730828236661138, 8.087413244286209, 8.068209770636715},{0.034362611462756654, -0.8901632042791734, 1.0212437469395343, -1.0216451983551267, -1.3546101477946009},{-0.40504537051241973, -1.1178732579791455, 4.934447869020193, -105.83752182059155, -105.84265021243999},{0.2625714472091141, 0.2062105375020038, -2.03085147273001, 0.24550885651374377, -0.1839935311745028},{0.3557974690771477, -0.7159716660843467, 4.116396376038372, -11.0374107433391, -11.054883966139641},{-1.4024969139127172, -1.824767834604097, -0.846472235529454, -0.19988510228136636, -1.1843707657592117},{-1.7928376098225771, 1.9861294130284621, 1.2645624968659135, -0.1912442493639408, 0.8757954744215279},{1.7404631054475712, -0.6914452442136849, -4.485329438723711, 107.86854970912805, -107.8567239492047},{1.3137227418965174, -1.3135120887236518, 1.2983040657996732, 0.3589959930009856, -0.3582243537754386},{0.17150561304775902, 0.20388594617569078, 0.6949760312513362, 0.3679984303912006, 0.38415901461693747},{-1.0756330031677108, -0.7106211289730955, 0.5752669964190327, -1.690296771047728, -1.4849576443972345},{-1.9845810347085793, 0.7181564593302849, -4.7457013497027285, -155.53249654931074, 155.52149262940512},{1.8743093294904658, 0.7313906313757674, 2.6789947722873393, 19.022317047260163, 18.943876125004984},{1.5042163740316257, 1.6990771640945628, -2.3250511860311276, -0.8398339621860478, 1.153047004108628},{0.8644355187375132, 1.5180869610031635, -2.016869586629506, -2.2974953045768842, 2.6145408640267336},{-0.6704835798600224, -0.44411923704880185, 3.2805468412316188, -14.823073400742143, -14.814560361672708},{-0.12047057654831983, -1.3569714911363704, 2.5913978415783223, -9.814440420324493, -9.907073192020043},{-0.8592868765551112, 1.6756434772759894, 0.9125952409077378, 0.5078185628627852, 1.5255447615542965},{0.11219213979903975, 1.8513342524179843, -1.3861583032290592, -3.2323368139591544, 3.723285204872034},{0.3496191310716741, 1.3940356804687548, 4.3740369807476895, 69.18458474786058, 69.19774467911157},{-0.42877265078208926, 1.6182284996959067, -4.193905571115454, -67.82982425089342, 67.84776986311533},{-1.7546015817325498, -0.12784981487665203, 1.370622435270894, -3.912915322484986, -3.4998035924153537},{-0.5419977471836945, -1.2726885427357133, -3.3027549505621234, 9.899430957937408, -9.966178197274424},{-0.7812674460316198, 1.9021214898651073, -1.4622681980709022, -5.660544361927611, 5.920257579981495},{0.7993685963234705, -1.4242959548952494, -2.836094116915554, 18.937349762394643, -18.97400444918287},{-1.7256204026732496, 1.1237251190474806, 0.5266648718541402, -1.350958168469138, 0.3317835770642884},{0.7533702134347386, -1.576954655091234, -0.8045288991522392, 2.4206931998245134, -2.789081367296381},{1.8610468176699815, 1.3593345329659838, -3.316423618475774, 6.972418991903179, -6.855575957832169},{-1.8930389088788062, -1.7571816820259252, 2.5922419035304136, -24.387990877960334, -24.3778216872754},{-1.5719678656577598, 0.2348109059978456, -0.7635766403357076, -2.250172785872622, 1.6270620016448893},{-0.4211054914041399, 1.7007206770779533, -1.110217784443262, -3.0090832791065063, 3.430700098689498},{-1.524163210102663, -0.3232269812692472, 0.7140698907657859, -2.180467398767176, -1.5924321861468607},{0.756544289899225, 1.9001327447925864, -2.9719733362575638, -11.099368561964987, 11.235396195043174},{0.011248358979564, 1.6328191708517439, -0.7763330098726744, -1.3840223562014258, 2.140441496884834},{0.05784045206223576, -0.4117969859292021, -0.1134231737184006, 0.10502043685739815, -0.4210231963720412},{-0.17158002161905128, 0.6985059190962519, -2.7130688463472312, -6.54100049915158, 6.575953037020179},{-0.1523303606085542, -0.4143983395931261, 4.154022894210215, -18.04533379219842, -18.049448554372862},{-1.5132596728811327, 1.6128587333936002, 4.727580791352892, 5.614603234417373, 5.642262661047056},{0.08271464908822646, -1.2139803499590862, 0.14236461792726285, -0.089857961004185, -1.2144879703269302},{1.4151955266438199, -1.5940583696425268, 1.2509792343364987, 0.11820876730637053, -0.7431130599463338},{1.3004015572716803, 1.5150627818512339, 3.9868274121512464, 75.85177987910492, 75.85576366928872},{-1.5108566652449644, 1.6675823864199364, -0.4360100354992422, -2.407096332072289, 2.508436944485299},{-0.46310948720173695, 0.9009403206842377, -0.717620860231758, -1.2910335951616592, 1.5046563754340725},{1.9971760074193545, 0.8383845937020111, -0.034580351942174126, 1.969372825996807, 0.7698090997903464},{1.865282016515851, 0.4115743470124804, 2.9419385900448125, 21.614470495249773, 21.537768018808364},{-0.5005724678957368, -1.7475767168777494, 1.301355076178309, -3.9604619940988957, -4.29985008953333},{-0.9059392130703015, -1.2865921179366508, 0.4886935898783644, -1.6703645611104863, -1.903867428990818},{1.1053465038275037, -1.3118808434277747, 0.532540470821874, 0.5337008196118275, -0.8854812356472722},{0.8950758786796653, 1.5902837219762698, -2.2665295207206837, -3.224110866981511, 3.4817714414327634},{-0.2761271464262858, 1.2274934922597285, -0.588280659560084, -1.0897893280244582, 1.6180651569150302},{1.5564976789134635, 0.8229325328894768, -1.2136454091189202, 1.587970645517261, -0.8810128831347457},{-0.232488271243388, -1.2818869147885477, -2.908088315834134, 9.572077111606653, -9.654731663624025},{-0.3507401801634191, 1.3559373817441314, -1.1466558770161814, -2.526336824488884, 2.845685376143793},{1.3373371415620832, -0.6031634632856697, -2.91151162181798, 17.85759986472163, -17.817665628856865},{-1.5527231377361712, 0.623929259498734, 3.003397751907462, -9.413409629780581, -9.305408074686632},{-0.2699511525546958, 1.7591577056916035, -3.9727173220750394, -53.88794551940161, 53.91597568912877},{-1.6937167779166802, 0.1397651254690344, 1.6644237849496921, -4.27801338953094, -3.9309358081132424},{0.68704021759627, -0.9212102701764091, -4.062306526767331, 46.724243253958434, -46.72827315187631},{1.1092718350664135, 1.8641076847067932, 3.9106197336778976, 74.2226907033874, 74.23780862004766},{0.6075656605364559, 0.3911587498549616, 2.5683575276011172, 6.5221662843071, 6.505576237035216},{-0.08501192636542187, 1.2516282787923245, -2.875447248346415, -11.818663390382461, 11.884449951756915},{1.6900058694783637, -1.4818484630797522, 1.0405823187987915, 0.8548598145891886, -0.2655942982444568},{-1.5974557616023948, -0.9339233900203703, -1.7080189096068428, -2.0600660084029068, 1.601318190469196},{-1.3138159199257877, -1.3566134672939985, -3.362091152975886, 0.5710608461264641, -0.6636251337703207},{-0.9894907859260567, 0.5464189546051781, -0.055957453184688255, -1.0216325275301965, 0.6026729459889402},{-0.03187667878662448, 1.9317194842503524, 0.42835391328027494, 0.8181513122535112, 2.0975928138998103},{0.8683451836597107, 0.10401563650658208, -4.081321023052017, 22.641403551622066, -22.624985097941106},{1.5637759047756545, -1.5228135661952504, 2.6916815636653375, 0.40681402323710714, 0.19764545664836675},{0.4524835171446151, -1.68785237401667, 4.068413332858288, -36.09407546757092, -36.130684855976526},{1.3866667559877714, -0.06566801977563275, -0.26021325384046623, 1.4511596857538467, -0.4328187036356057},{1.2248210947457103, 0.32059014600814173, -3.4561511398322393, 14.354067796604541, -14.305308582379583},{-0.7902693816103987, 0.5814345620397088, -0.8364334820037591, -1.6282680309403086, 1.537789723923806},{1.6070303299931608, 0.6633116637844232, -3.49045614171604, 15.512021619746383, -15.442805788239188},{1.6973032859851207, 1.6753108457428088, -3.770074753819217, 0.5159223533792385, -0.4381824505431027},{-0.26452764034612675, -0.4067123505214616, 3.269598137409039, -8.82436055829168, -8.829766663185017},{-1.0718058063033413, -0.7417140741508763, 1.2915375600310073, -3.3444965426393667, -3.253771535479191},{-1.1446442621809998, -1.3839534322866713, -0.9226985182354799, -0.20142993679553922, -0.8035487758883262},{1.1299482680246316, 0.9210237575946327, 1.8003296731237874, 6.223136232947694, 6.188612627032677},{0.4060994979600978, -1.1906418779835102, 0.7587105338188218, -0.46385034371067246, -1.2115561979228062},{-0.4895987491400864, 1.824664935920389, 2.8598287870449832, 11.587872725824482, 11.720430431649033},{0.6964538835343674, 0.8470895870754904, 3.052118481517013, 16.327226430530867, 16.33434527829222},{1.4466282288328727, 1.0211430377915591, 0.8877987215079433, 3.0856211426258966, 2.9105081527104475},{-0.5146249670470684, -0.14665942064566573, 4.2832594570698586, -23.96625764801292, -23.9611806007111},{-0.5730747050934817, -1.772910892896192, 3.341813888354828, -33.13970737566086, -33.18214886593336},{0.8579480450089436, -1.1891212728068103, 1.4904212859949997, -0.5044536528104673, -0.9656127802286192},{-1.7932227126827003, 1.9369242874143104, 0.22686714485918635, -1.3963647739746845, 1.5766618470336955},{-1.8099309835620983, 1.3974191653008101, -0.9163998152830448, -4.092118410296249, 3.9271316812881953},{-1.419654392916239, -1.6345959194824873, -4.366280873792959, 8.443952564966054, -8.482736595230293},{0.9369861903524144, -0.2667439799917293, -2.138608280223231, 5.147883873973681, -5.068916808339723},{-1.1931405783500562, 1.9158431525608557, 3.4453413285127343, 11.280223572701495, 11.379381107759745},{1.6591816549577758, 0.9535188422956096, -4.49365157566772, 31.57448287638578, -31.545273549767217},{-0.04878876350142458, 1.432092547853968, 4.041983217384196, 39.36906927415936, 39.39507741121641},{-0.6554086752760317, -0.8596674906946142, -2.9101899163600793, 1.833865444841562, -1.9163846515545977},{1.4100159996363786, -0.5923329626903424, 2.6239641284042765, 5.710639762429897, 5.56543975941743},{-1.3541449829819334, -1.9874031656644313, 4.435567408557189, -141.00958132417125, -141.0170843831556},{0.46924004427794985, -1.7195490634994461, 4.3977729596318795, -50.79263831621569, -50.819570736917186},{-1.162759226929539, -1.2640159757303209, 2.839735621474615, -20.759609008688706, -20.765526565939062},{0.9522497622028081, -1.0786023794903945, -1.6053812678385366, 5.0438893373433995, -5.069262582545264},{1.4767125936320702, 1.9987309199071985, -3.202854373058266, -6.350886978911273, 6.4921499231692295},{1.40663625636601, -1.9553799542218977, -4.045155917616198, 96.01453314430151, -96.02413998639},{1.3742669260527252, 0.2663037470606242, 3.0217400308053346, 16.864967198467863, 16.810991247010183},{-1.0280783666828581, -0.03340011125693243, 3.041795239247284, -11.138916864130683, -11.09142188113885},{0.5628409953040676, -1.0406752010184266, 0.4809323133004808, 0.10918432121850663, -0.88212023217916},{-1.2525219485790364, 0.28239005880351353, -1.999460962177947, -5.733401458532448, 5.602037593442303},{-0.644867847750269, -1.9885059728487156, 2.8662395255341675, -23.097032700974278, -23.173502563334445},{0.24796585292601314, -1.5662654682598744, 1.6341163357167474, -3.20109414194977, -3.55509552030197},{1.669783216581597, 0.24923493301881416, 4.28719070240858, 69.82534182339847, 69.8058185455618},{1.247010277920689, 1.6251631708034946, -0.3317567498367655, 0.7671629474765418, 1.2940864292917722},{-1.6593906450892935, -1.0192934691399356, -3.9588321037965977, -16.794858726732553, 16.743734992949626},{-1.1046243332518482, 0.37400946616763875, -0.5900289120971216, -1.5362517066757044, 1.131263660441246},{-0.14637383682270655, 1.9360508677665784, -4.545908647881383, -98.12063043190444, 98.13961984854458},{-0.9834896162598123, 1.5712361043737801, 1.8395881315943932, 1.6466711136659589, 2.0525732208568623},{0.8265043885977157, -0.9949836434110968, -3.9381492645997183, 46.740953823661464, -46.744236514162225},{-1.512130600288256, 0.3927698568575906, 0.8784245557555099, -1.7428920829221282, -0.9515261535241403},{-1.2450429224214843, 0.23863446669292987, 1.6947339397353964, -2.8762834178601118, -2.6038089080957985},{1.1043595443815155, -0.8702060932249791, -4.07165708343091, 57.910158337018174, -57.906166228303654},{0.3372842209834519, 0.12365301352145108, -3.21668312926585, 2.6737801362431663, -2.655302174705743},{1.4759614998794839, 1.9632747548158132, -4.1008385540992505, -14.686170044771778, 14.74311961552651},{0.8597005851163666, 1.5399106321129055, 4.454095534920915, 103.15335234464968, 103.16126375533739},{1.3431541946201122, 1.2884644807425865, -2.9898115513121297, 0.6098498289426217, -0.4774875301733079},{-1.0448661746293495, 0.338137838031209, 2.1593104664561844, -3.141759856696138, -2.982154736389645},{-1.6837940202365957, 0.5623639685130599, 4.9669200393225115, -80.51751269592492, -80.50186918121175},{0.10876710900395814, 0.07757151307047438, 4.711175981547253, 10.358968147673982, 10.35868756842116},{-1.1175915286525109, -1.0210267977710625, -0.7344141338929031, -0.6136730947748851, -0.4124070369202726},{-0.45281382836455064, 0.7587554578260383, -4.335883865161806, -46.27537043324514, 46.27937530062049},{0.23027284656335478, -0.4160885831803638, 0.9977271986643466, -0.13281436153937287, -0.37113849142842004},{-0.594054131181089, 0.6903622144504493, -0.4943169928718252, -1.023448687811665, 1.0821954042366975},{1.0559366848456264, 0.11748138807632458, -0.2842829125617472, 1.065043895803084, -0.1819837743563374},{-1.1528606225193805, -1.2822011531855826, 3.134393003734626, -27.969575068171693, -27.97520476558422},{-0.429919144788103, 0.2847754089675596, -3.1724229222864677, -8.53121870654748, 8.525136901038184},{-0.8550099075101076, 1.4925093421414224, 1.000762540871646, 0.43563962744976736, 1.2985854147662181},{1.848622359737924, -1.8339831097390449, -0.5343125107535407, 3.1460582710067864, -3.137478615457849},{-1.146881155286791, -0.9101330980881144, 4.750926090814193, -118.99042754211462, -118.98838116609161},{1.556002149135229, 1.2692074278935728, 1.7269400561153683, 7.969170334599592, 7.918170282885367},{0.49442456750676644, -1.1343600653152202, -1.332664437394243, 3.003069080533244, -3.171867116901728},{1.6348393376005208, -1.6230568205695581, 2.448382749273698, 0.20895491512511022, -0.07263566332178684},{-1.3802051524383168, 0.9170404907861034, -2.1920350551585215, -10.309962374012585, 10.258231872622064},{-0.590727755502418, 0.3350194385941232, 0.4650241492517262, -0.49429068423129097, 0.08718958442861602},{1.978195885446699, -0.08323709764384057, 4.836786055613661, 119.45078145124828, 119.43442911810273},{0.3373872999627663, 1.8121789951857439, -4.6737802333560605, -78.96642292714168, 78.98649322782109},{1.0815955775322559, -0.7524796019491193, 4.779521397150166, 19.597897146399347, 19.58249088136798},{-1.4255142424776535, 1.8123881496386836, 1.391860939011834, 0.37557589838089855, 1.1805580057281015},{-0.5826160086467003, 1.7088458228375667, 0.863634811490952, 0.8525059585074324, 1.8186475859793902},{0.9219050380042129, -0.9595591880771421, -3.176268192179781, 22.53650545040997, -22.538077177361068},{-0.27434092296530244, -1.9951354527818905, 4.793137084965666, -136.93234510137702, -136.94660432991958},{1.3202204786305058, 1.390639638440574, -0.45286278120645207, 0.8064117913303946, 0.9171676340797598},{1.9390589485395675, -0.5965424237256536, 3.6398130404877733, 25.597969088033235, 25.53139116243566},{1.4814675875546528, -1.8731200466461762, -1.8175758259580732, 10.295149411122619, -10.358761214233638},{-1.625670361337147, 0.23394718950377236, -4.462321513765606, -80.61177775028206, 80.59572345493659},{-1.3015160879055758, -1.4380585109758304, 4.1930070347475965, -90.70850661338456, -90.71056851428253},{0.7976874031404577, -1.0103619107431423, 0.541218911069473, 0.34347902068766656, -0.7088750490771449},{-1.2447022241051742, -0.24275340878240015, -4.349636584678075, -38.81022641144899, 38.791021122145196},{-1.5091715126069085, -1.2495667713232836, -0.4000206069216663, -1.1182461061419513, -0.7309533606412292},{-1.0600751125017362, -0.8998111510474827, 2.328945852898242, -10.068991375169643, -10.053381927323985},{-0.09906719130823416, 1.5364673112239178, -0.8893409181064795, -1.6947243398339777, 2.2853901369551033},{1.450110753604644, -0.225947144662058, 0.6587441040178676, 1.6164455172419894, 0.7490841238958614},{-0.7300660059054447, -0.7838364358991281, -1.1025463478895388, -0.1703528192588386, -0.33229996733938105},{-0.43498627048727734, -1.2920074949296143, -1.1525981244954169, 1.0841344210618442, -1.6295452599952438},{0.7612940577037266, -1.4246243597441348, 1.2287623516064912, -0.8134396235295493, -1.45315860979085},{-1.2163370256929926, -0.995952533513873, -4.211924314682261, -7.452855410735289, 7.4200740873839806},{0.000676453249504938, -1.966770254369709, 2.9101392731369833, -17.99452579231952, -18.10168896170567},{1.3753053866288316, -1.0995123957030124, -2.245871488822515, 11.706433326503355, -11.67724470196984},{-0.7368770994369722, 1.8388380754049138, 3.1405599288489476, 12.681198726180398, 12.792620479822087},{-0.34845934913365006, 1.4890700452250858, -1.0616489155055824, -2.4590120590915063, 2.8535321950777854},{-0.013710022554975998, -1.5646229132345222, -0.17477853904774676, 0.26093694283024865, -1.5861730624473551},{-1.9896732957149557, -0.7217025276253617, 2.241040841409112, -12.815110017263898, -12.680264171904192},{1.1687945266771744, 1.4349510640291792, 1.9669813293301042, 9.288556128541332, 9.325785696853144},{0.11275336225663724, 0.16474706019104746, 2.7993019747552097, 2.2785241118885198, 2.2816880596608256},{-1.2138839215174633, 0.07952361662634644, 2.501728377340635, -6.974614630171003, -6.868628616403577},{1.7444154032732522, 1.8856284741855491, -2.555319469611619, -0.7681201918570917, 1.0500563187852912},{-0.26243154962677373, 1.9055773278683383, -3.4264887433850753, -33.326398829162336, 33.379802479263404},{1.3263315612890025, 0.24849840514814048, 0.8255922351764289, 2.0338838147461793, 1.5618192657206906},{0.6431145252009456, 0.8909544745235247, -4.203975448081902, -8.285229533546207, 8.30814251242089},{0.319910189785527, -0.6351829471736925, 4.9863453448997, -23.074767231193253, -23.08129107352103},{-0.8503847059099354, 0.8849591257563478, 1.445061302735664, -0.13120342687925057, 0.27787199470038537},{-0.11821522429675735, 0.9848682338990167, 4.413095839635661, 35.75339197580455, 35.76675870657576},{-0.20809155738827112, 1.8022611590768962, 4.960442207406906, 113.70257341127801, 113.71666563673206},{-1.9791770674189884, -0.09372003157382025, 2.06097236730386, -8.259892826030747, -8.019817396776261},{0.24660843258953635, -1.8847543952873267, -1.8078113355494745, 6.363215338853045, -6.631892102571127},{1.4980573856325412, 1.9981100274413959, -0.5374782233947446, 0.5932985972162566, 1.4492311674030578},{0.6337609405792644, -1.3928970888909835, 4.199250516685392, -25.277831583708778, -25.308245275893434},{1.465098520856575, -0.7310561122470431, -3.468588067127159, 35.250274637615505, -35.22740114443239},{0.5300849125840923, -1.4198606048997728, 1.7272984166467271, -2.3293729432996777, -2.6760030702100606},{0.730779997445894, 1.5452166786850756, -2.962747351885092, -7.821299699340123, 7.938915805468487},{-1.1009890759530379, 0.9285188383689977, 3.902599489305782, -4.291802119836877, -4.2508276516079135},{-1.2059218733350483, 0.9927309556207824, -4.7396752713813655, -125.76062802547636, 125.75876442040885},{-0.6855686368672236, -1.3211674780477218, -0.7103612753985686, 0.15351291616836116, -1.1397567129109216},{-1.3939274941850872, -0.6836786643086197, 2.2345595282754402, -9.742890719202592, -9.66686620489338},{1.082094549261308, 1.9989695947058963, -0.9084471774569414, -0.5160743878624063, 1.7582046527140058},{1.4287252904536012, -0.18684933849164875, 3.4660120538919, 19.900739499066653, 19.85026673194657},{1.1065362164331312, 0.848585895353374, 2.80557823712415, 16.17336996393318, 16.157771245248227},{-1.3443751758891338, 1.5613195377480555, 0.08421209026852772, -1.2175074888002224, 1.4535124941642181},{0.22322037080269785, -0.27289401425813153, -4.999300644935643, 36.78904639340854, -36.78938132594026},{-0.7603932905575406, 1.2304894151819155, -0.9425597642639634, -2.463261210435232, 2.646424386863273},{0.6858483788929663, -1.439225812509819, -1.2134151866466425, 3.4634470606159624, -3.687336231245232},{-0.9830964115204983, -0.630472956798414, -0.8326240595499881, -0.7562773486319366, 0.05452543409644428},{0.4325393760800349, -0.9820660062263948, 4.332264785460907, -20.904723729346067, -20.92330847473723},{0.23822508572640322, -1.3806112854283163, -0.9211770694578867, 1.8060938408020215, -2.260820933149212},{-1.3736303022487686, 1.3896391903730292, -1.2571064506949408, -4.854494091830954, 4.859048236001183},{-1.024095651894021, -0.9349498399968239, -1.6101141143359543, -0.4187874050644682, 0.027243159186812083},{1.2739370489193256, 1.2487983623641106, -2.3380739550564167, 0.25197306807842246, -0.008495426467065137},{-1.8836523551768412, -1.9565523662625897, -0.93544432982576, -0.6605829754849717, -0.846357391569931},{0.378922039084467, 1.5555734573329776, 1.3220342709901693, 3.4713459358305423, 3.78503229519408},{-1.3910813204098058, -0.990605004117119, -0.27844229711756796, -1.165951655141509, -0.6368942583475004},{-1.9037256676839673, 1.590984685816589, -1.8087772957537043, -10.689696955227937, 10.63845298186318},{1.6503979954265695, 1.4768856177443488, -0.1013612160006403, 1.5089280398480127, 1.316906000453956},{-1.349880616052713, -1.73924119494646, -0.050679504944186604, -1.2634328928323588, -1.6730346473682727},{-1.0164488345062352, 1.5850692239441107, 2.2620111269698047, 2.5945927871741805, 2.865517046325495},{0.7057911491029998, -0.2652471968703456, 1.300747014916693, 0.9410678263526279, 0.6766266201469628},{0.788456805964763, 0.6623435153655892, -4.727673662350104, 7.133855596242121, -7.1210203247505035},{-1.8586232331177894, 1.2328833486317854, -4.666175482576196, -164.30176320561492, 164.2958761305426},{1.5000118554697641, 1.1319817709993294, -1.6393493313029683, 1.2034549656324298, -0.69256842090171},{-1.9627445253465108, 1.909027169653175, -0.361268276747972, -2.7969984402595953, 2.7595686143872054},{-0.3061377279477566, -1.4396301430908598, -0.12607085986642108, -0.1265972378980883, -1.4123885800537404},{-0.7946266946464757, -0.5668965330012967, 1.4516041472170373, -2.933490506173869, -2.8801573993614187},{-1.0339795094403335, -0.3796959185905866, 1.3207475405269529, -2.7352959525209153, -2.5606443158957433},{1.874850509783815, 1.2312676874300124, 2.7500131886068404, 24.314823344489092, 24.273681013760243},{1.7398422102460183, -0.7874930055817742, 2.805842880925135, 7.952805902711248, 7.800013848929074},{0.9586285085605253, -1.4930411383857671, -2.3025570313782397, 12.231282869173405, -12.284725631825161},{1.6223252969002893, 1.8266467375611959, 2.90674648533855, 31.547632999408386, 31.558799831429603},{-0.958278287204785, 1.7132981272471142, -0.07211487934903804, -1.0844325645606605, 1.786921146603829},{-0.5311636779168234, -1.5186481441139252, -0.5906838220157935, 0.32356961937618, -1.4590595023732884},{-1.2342192570931396, -1.9642671449155267, -0.24822450750184988, -0.7798365963721026, -1.715573769634019},{-1.202294019365984, 1.145476661497447, -1.2314154028157702, -4.030111568401128, 4.013527765793171},{0.02585968721544507, -0.43356170679599604, -4.886321534863223, 30.427182155426504, -30.43025995534185},{-0.2324083713723264, -1.1866473072027808, 1.1102528520848756, -1.9963069619532448, -2.310705447899119},{-0.9131571225058144, -0.7393672329865593, 4.3359387633712885, -63.12479453816796, -63.1225197014564},{0.8217758439336609, -0.7398038600670103, 0.24483543219505144, 0.6635843008263043, -0.5588723807814295},{0.6926537925532998, 1.1084777166865467, 3.2226052291815126, 22.589979453318797, 22.606550494788394},{-1.3709021492051556, 0.2113019366672253, -1.63812188626784, -4.18329395362503, 3.9579317968074865},{0.5232613487657445, -1.4066350042896287, -4.223520650830087, 65.87385101753655, -65.88678977971823},{-1.452954735141152, 1.3777846872682975, 2.714827892091698, -0.6613300465120968, -0.47388881873451894},{0.2847320524525201, 0.980606971654844, 3.3307832530339674, 17.677142999516427, 17.70203102235777},{-0.6816604717909942, -0.5286206403446989, -3.6587354229477653, -2.9855001186725563, 2.9543171361906904},{0.24547042371940098, -1.9422932388044352, -0.6574903642330341, 1.6715249303372584, -2.5507337942881096},{-0.285270013112767, -1.0147257162135888, -0.10056852920613935, -0.18449226228317794, -0.9911239547131262},{1.044350061753486, 0.6062522702006863, -0.7594195197154843, 0.8543049924056582, -0.08192547642954451},{-0.6693252624773003, -1.166951874913739, -1.8462474382304443, 1.4315725021980605, -1.7213890322713232},{1.172970843348062, -1.2626902581876713, -3.6938590364542607, 48.95528256498277, -48.95751440898612},{-1.2855442401510258, 1.7951861560797644, -0.8715535375608763, -3.5758388509579824, 3.7890226747296545},{0.23772433296577544, -0.26615121180587, -3.842817862834556, 11.754295979385438, -11.754905256107271},{-1.6669609432333563, -1.2336550266895259, -2.00664260656691, -1.8065085144262847, 1.4165517820770113},{0.21740243114677682, -1.7246677044289214, 2.5733527975092194, -9.805831623203789, -9.95397150368912},{1.4826129704860032, -0.7678718526396342, 0.7888992681338367, 1.2978105901425891, 0.2753148919131494},{1.9849910572502019, -1.1236392997146831, 3.8397398881163998, 20.06560482319681, 19.998771779766848},{-1.0151150302691652, 1.1519429321639407, 4.0371491889437365, 3.8575254659447147, 3.8957690787180965},{-1.6370748881015023, -1.7524247720814938, 1.5737163668641134, -8.164441820295977, -8.188350788134947},{0.9004039157285204, -1.4322610441812664, 1.490491607357142, -0.9178003992597872, -1.4432609119980295},{-1.6082377862201302, -0.8334448724656096, -4.73783474761861, -44.2462110681336, 44.22482781723681},{0.263157586176213, 1.6254172404693952, 4.923030425402885, 129.75752690435854, 129.76744012896987},{-0.11253633019422105, -0.012174709394865646, -3.509809696335732, -1.680006389386362, 1.6762772044964003},{-1.513400800324849, -1.3446644775545868, 4.180663958379, -93.47326847006477, -93.47068876953662},{-1.3889149357844945, 1.6102384993898342, -2.2014010820028656, -13.540430725720924, 13.564919740423061},{0.687380613620765, -0.5408578679484355, 4.9884470595308485, 10.75224602572866, 10.743874055625263},{-1.2434855446996442, 0.4398053857022588, 2.074138963264799, -3.3034844688551877, -3.0919544164465256},{-0.9050250919161809, -1.8112245005183778, 4.609021856898504, -136.33207972882528, -136.34110688622508},{0.4378933715260498, 1.928419780549429, -4.790226503677334, -89.66666056116583, 89.68632598359973},{-0.41954884341681087, 0.8124761310566546, 4.898019025970687, 26.326250737638414, 26.335443306170696},{0.1964457287232877, 1.5926258659780546, 0.541000023977368, 1.1301612505861078, 1.9429695512218093},{1.4726084107131237, -0.4588897937221257, 4.8009007065661375, 61.65212523805222, 61.636243807357005},{-0.3946850546245584, 1.8623699113232894, -3.945823402302448, -58.352017812123364, 58.38039592312321},{-0.7670203309943102, -1.853827186676123, 4.667477718777375, -139.4619318109923, -139.47214338176553},{1.6651561837786648, 0.7931742833034305, -1.708706929955106, 2.6300637354011127, -2.1848605400779335},{0.7720161794271307, 1.4763806842970424, 2.3739138513600713, 12.040358151500458, 12.105945455026289},{0.8786238564919078, 0.8435963988777018, 3.4811782144199395, 27.984886484345573, 27.983808649730122},{-0.6308856160391605, -1.9338522745647466, 2.210971971223568, -11.62968049102059, -11.772477915992837},{-0.8039744429553113, -0.22351148201721527, -0.3756307103892347, -0.7754181382812999, 0.0696833326116515},{1.4117803777763034, 1.6549153507668142, -0.35967941160917505, 0.8959331168497238, 1.244313920599423},{-1.7555672295311355, 1.549410466453014, 3.083111779219484, -2.325522133044114, -2.174099741830762},{-1.3768514336493598, -1.9017400428550126, 4.20604844735516, -109.97791808903935, -109.98574163281214},{1.5680885279091288, -0.17002571695279056, 1.9543568228175747, 5.057833089804386, 4.811619548279485},{-1.089596800485067, -1.9082921563879136, 2.2010218562579524, -13.496514192672347, -13.587135574487746},{1.903118872635122, 0.06680680063723132, -3.2519086053897244, 23.762912682653404, -23.686676019835318},{-0.4887056414576585, 1.8369711471998684, 2.956045030369511, 12.89754886096489, 13.018540487037287},{1.5032110007994217, 1.7348058405595568, -0.031941421611094256, 1.448556307163124, 1.6876680261642747},{1.770637634371501, 1.8482956500326075, -0.30330598699193345, 1.2834743029436901, 1.3886487907291554},{-0.2572093391133021, -1.7787728320815128, -3.462372654137966, 24.231355685809856, -24.295194473727804},{-0.7444709611474134, -0.3554692962582895, -3.6529805275589418, -7.519943994692351, 7.491440388329884},{-0.9530375895643153, 1.425554755805377, 2.1569699365367025, 1.9048606653597417, 2.180004557130909},{1.62840458946149, -1.0447454331764017, -3.63713496674451, 50.77462276661329, -50.75925638349176},{0.9596691019795589, -0.4384022111757411, -4.359954977551279, 54.70539509214109, -54.69873384184248},{1.0338516547598546, 1.1226979547796905, 0.9479494416911365, 2.765178742966897, 2.7996097824826944},{-1.2471929918199334, 1.2990458142002979, -2.1613136914396796, -11.050919444821657, 11.056891527209805},{0.6085421423049535, -1.095488641852541, -1.4490794775073228, 3.571732978636906, -3.6860613527380806},{1.3926838625374303, 0.38731497438646656, -4.276348950493387, 36.19416744875859, -36.16943740034103},{-1.8351608298555158, -0.25184684120428025, -0.37873203647489184, -1.8706783346154776, 0.4416435118829735},{1.2424980093669604, -1.260715585660893, 2.2134129604525965, 0.05351726720538785, -0.22015127193945982},{0.22010259594855297, 0.2872434425433621, -4.514653997407722, -3.063745304934379, 3.0692994210484468},{1.9256960822014797, -1.3414951928757057, 0.07806358390968526, 1.826738268253071, -1.1951052891702587},{-0.8397132537229433, -1.1970018725782108, 0.6983125761195987, -1.9584008235101247, -2.1361247435491464},{-0.7215815746161924, -0.1387590679232411, 4.168809009994153, -27.81003931500347, -27.801022657667538},{1.670782888142886, -1.6260929327636515, -3.8978181923007797, 81.25983736832026, -81.25893078236098},{-1.7251602585397694, -0.7165320862435804, -4.788883381415743, -60.612127291709, 60.591808152086905},{-1.7239664470647962, 0.5266865826645111, 3.5874018208659404, -21.66601830431678, -21.603742444510473},{-1.1580513619332575, 1.5367491385960967, 4.10330349620868, 11.440916062853034, 11.485428825923265},{-0.7851418676021766, 0.5547051955233804, 3.3565268438979636, -3.3288929734161545, -3.2821911172474767},{1.7156253162819923, -1.443646674726471, -3.6913005951012345, 63.341997533725106, -63.33521451023924},{0.18232399128212862, 0.9126271888602031, 0.6925707370642247, 0.9116391101743582, 1.277001258906712},{1.2450613365756986, -1.6789169407946303, 3.112758962156356, -4.8121588483201325, -4.942211766377202},{0.6062454066828038, 0.8711542693393501, 4.700525840314203, 81.25947331120538, 81.26188146408109},{0.9702638434023116, -0.6772225070736158, 1.966769054764118, 1.1625115820731513, 0.93201479426427},{1.6041767831904776, -1.5564227392621992, -0.2804580885499801, 2.1099373826762307, -2.073862182108474},{-0.055241016161095224, -1.932572355405619, -2.9943603443641784, 18.697811835646178, -18.79733895476277},{-1.3270413678178157, 1.3900537883155244, -3.1879577324120105, -32.928364550904405, 32.93096419389764},{-0.9133694540276638, -1.8833946930913448, 2.1664350658900453, -12.14826850358525, -12.25941921322602},{0.5424929157530669, 0.1740033571121331, -0.40105746979258594, 0.5150388228190916, -0.03526462327750246},{1.6215126897803196, 0.22140985654769718, 2.322249430623976, 9.466247288353369, 9.328963321061748},{1.2333316054001617, -1.2496415795590305, 0.8529988010550396, 0.5099039452387644, -0.5481781296749306},{1.9586359288472788, -0.08944588752622229, -0.09087300366169426, 1.97486801623854, -0.268047657303431},{0.7370227372315377, 1.5150586681094782, -4.943156630265575, -54.537014208826136, 54.55307616501863},{-1.9811081853035823, 0.6695950926371568, 1.7820070146378741, -4.11941108055831, -3.6732976460985975},{1.3497787157115853, -1.371161973619107, -0.13805453599509754, 1.5525589123737904, -1.5711848245519413},{-0.37382774011718656, 1.2331734088029305, -0.5943399999378132, -1.21866233679166, 1.6929581707803727},{1.402285269848894, 1.4521689027706803, -1.516009008200088, 0.1998144351116231, 0.42698519016236824},{0.14075131024455523, -0.8191245866988033, -3.691827173697275, 19.245735617479646, -19.262645031644112},{0.16026479131980276, -0.6096071101964144, 2.099189732197954, -1.786040772458986, -1.8803929553024636},{-1.435366798326189, -1.750289321153975, 3.566855228170658, -56.389752695732895, -56.398647536513884},{-1.8973468443523565, -0.9504254664356673, -4.432566672619362, -39.857273888833355, 39.823431109950256},{1.4078502765718452, -0.566941936989513, 0.8419293192729587, 1.4012546557981487, 0.5503593090608969},{-1.1228053847593302, 0.7790122501909522, 3.720699693521315, -7.12120068192694, -7.0751443311200255},{-1.2894005321736302, -0.3559787935622605, -2.4581293745848063, -5.5229715914929525, 5.382135484130308},{-1.9140053924403677, -0.7415694349443105, -4.373937975705563, -46.53636308955643, 46.50289881488662},{0.8759969399215222, 0.9051191942584356, -3.162096413663501, -0.30623125793314543, 0.38163817995384797},{0.09016001839797205, -0.5143959498820634, -4.836391746551865, 38.08952640410516, -38.092892986138},{-1.8294717671392113, -0.15955066044805322, 0.14715489712418428, -1.8728792338047895, -0.4314696871243188},{1.9627901457316108, 1.120953699296456, -0.9663099785007709, 1.692927482062851, -0.51961091146064},{0.6510116822778285, 0.5297320827211238, -3.039545071031818, 1.2953664105050056, -1.2388599624116008},{-1.263718606640978, 1.8719994320868762, 2.6036305132814945, 3.9937318394250827, 4.225788821297229},{-1.9264174962390972, 1.0922601869212825, 2.1381279548019974, -3.7162177182922687, -3.360390167207762},{0.9554575977529653, 0.8151519387052133, 2.104588443008769, 7.271349094835685, 7.254246419928037},{1.9792542419992767, -1.94966159650547, 0.19997626042653405, 1.626472134294044, -1.5903284535124027},{-1.2483246411944642, 0.49365019188133985, 4.962237755288189, -53.9325810769698, -53.920392039803026},{-0.09053772869017473, 0.911226019253589, -3.913029417420834, -25.061112434683388, 25.077509689793576},{-1.9778950436163347, 0.7885085720133693, -1.755624973365257, -8.107439042243094, 7.90191399524597},{-0.21622344924616188, -0.5076271263374585, 0.010816501065241901, -0.2217269545039766, -0.5099956487494056},{-1.4385313827051247, -0.08822288133303813, 1.1273016708748598, -2.5754719796049694, -2.138098841376031},{-0.06925590333480613, -0.5307915696264072, 2.641314841865407, -4.193379076530086, -4.226271570748863},{1.4954630705969785, 1.1155921579599801, 1.5684326329252123, 6.304961232404315, 6.225806952476426},{1.0772716947468863, 1.4451246671024487, -2.410995865526584, -1.936708594374422, 2.163032865836507},{-0.12430230563545086, -1.4163784971344537, 3.650573912467932, -29.63882290016947, -29.672386150958076},{1.1261393824795412, 0.9644716751109601, -4.6279168254153005, 8.27958034523202, -8.259144410680335},{1.4381246086035078, -1.6623691895338282, -0.8331958388573426, 3.5178554726255884, -3.615325166388518},{0.3650567190800418, -0.05424826505903391, 0.8332605251001883, 0.4486765773701248, 0.26643411417647},{-0.8947469528378122, -1.54672039958692, 3.737077666477555, -51.23270734630332, -51.24823971529996},{-1.5974398866251185, 1.636044616788595, -1.508115840832707, -7.300508466780018, 7.309052720446665},{1.9993679959940436, -0.7130320445850988, -2.478321090953725, 16.2215278212397, -16.113624892259768},{0.319481968920031, -1.445756671108405, -4.371584245936163, 69.86893655919148, -69.88316277570667},{1.132973869253961, -0.2641395339455155, -2.264965590238944, 6.772762234679715, -6.682548031438638},{-0.8747730808540064, -1.8314978058569993, -1.0324320094484882, 0.8612817977990201, -1.825092492201999} };

  for (unsigned int n = 0; n < sizeof (test_data) / sizeof (test_data[0]); ++n)
    {
      float a_new = flassol::Regressor::hyperbolic_safe (test_data[n].a,
                                                         test_data[n].b,
                                                         test_data[n].s);

      float b_new = flassol::Regressor::hyperbolic_safe (test_data[n].b,
                                                         test_data[n].a,
                                                         test_data[n].s);

      assert (fuzzy_eq (a_new, test_data[n].a_new) ||
              (std::cerr << " a = " << test_data[n].a
                         << " b = " << test_data[n].b
                         << " s = " << test_data[n].s
                         << " (computed) a_new = " << a_new
                         << " a_new = " << test_data[n].a_new
                         << std::endl,
               0));

      assert (fuzzy_eq (b_new, test_data[n].b_new) ||
              (std::cerr << " a = " << test_data[n].a
                         << " b = " << test_data[n].b
                         << " s = " << test_data[n].s
                         << " (computed) b_new = " << b_new
                         << " b_new = " << test_data[n].b_new
                         << std::endl,
               0));
    }
}

}

int
main (void)
{
  srand48 (69);

  test_regressor_open ();
  test_regressor_linear ();
  test_regressor_quad ();
  test_worker_quad ();
  test_regressor_quad_ngram ();
  test_regressor_dp ();
  test_hyperbolic_safe ();

  return 0;
}
